#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
cv::Mat img(500, 500, CV_8UC3);
// 随机生成因子
RNG& rng = theRNG();
for (;;)
{
int i, count = rng.uniform(1, 101);
vector<Point> points;
// 随机生成二维点集
for (i = 0; i < count; i++)
{
Point pt;
pt.x = rng.uniform(img.cols / 4, img.cols * 3 / 4);
pt.y = rng.uniform(img.rows / 4, img.rows * 3 / 4);
points.push_back(pt);
}
// 二维点集计算出封闭一个倾斜最小面积的矩形
RotatedRect box = minAreaRect(Mat(points));
Point2f center, vtx[4];
float radius = 0;
// 来计算完全包围已有轮廓最小圆
minEnclosingCircle(Mat(points), center, radius);
box.points(vtx);
img = Scalar::all(0);
// 绘图圆显示
for (i = 0; i < count; i++)
circle(img, points[i], 3, Scalar(0, 0, 255), CV_FILLED, CV_AA);
// 绘图线显示
for (i = 0; i < 4; i++)
line(img, vtx[i], vtx[(i + 1) % 4], Scalar(0, 255, 0), 1, CV_AA);
circle(img, center, cvRound(radius), Scalar(0, 255, 255), 1, CV_AA);
imshow("rect & circle", img);
char key = (char)cvWaitKey();
if (key == 27 || key == 'q' || key == 'Q') // 'ESC'
break;
}
return 0;
}
转载:http://blog.youkuaiyun.com/zhuwei1988
本文介绍了一个使用OpenCV库实现的C++程序,该程序能够随机生成点集并计算出能封闭这些点的最小面积矩形及最小外接圆,通过视觉化的方式展示出来。
1255

被折叠的 条评论
为什么被折叠?



