【OpenCV笔记 15-1】OpenCV寻找物体的凸包convexHull

OpenCV寻找物体的凸包convexHull()

应用到的知识点:

1.寻找物体的凸包convexHull
2.定义和输出vector容器点座标

3.随机数发生器

==================================

凸包检测示例程序:

//寻找物体的凸包convexHull
//定义和输出vector容器点座标

#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <vector>
using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat testImage(600, 600, CV_8UC3);//画布大小600x600
	RNG& rng = theRNG();
	//按回车键一直更新
	while (1)
	{
		//int count = (unsigned)rng % 100 + 8;//随机生成点的数量
		int count = rng.uniform(5, 20);//随机产生点的个数
		cout << "凸包包含 " << count << " 个点" << endl;
		cout << "各点座标如下:" << endl;//输出产生随机点个数
		vector<Point>points;//vector容器存放点座标

		for (int i = 0; i < count; i++)
		{
			Point point;
			//点座标随机产生
			point.x = rng.uniform(testImage.cols / 5, testImage.cols * 4 / 5); //横座标x在范围(600/1,600*4/5)随机产生
			point.y = rng.uniform(testImage.rows / 4, testImage.rows * 3 / 4);//纵座标y在范围(600/4,600*3/4)随机产生
			points.push_back(point);
			cout << "Point" << i + 1 << ": " << point << endl;//依次输出随机产生每个点的座标
		}

		cout << "基于Mat的vector:\n" << Mat(points) << endl;//基于Mat类的vector将以矩阵形式输出座标

		//检测凸包
		vector<int >hull;
		convexHull(Mat(points), hull, true);

		testImage = Scalar::all(0);//将画布设置为黑色
		for (int i = 0; i < count; i++)
			circle(testImage, points[i], 5, Scalar(255, 0, 255), -1, 4);//以随机点为圆心,画出半径为5的实心圆(标记作用)
		//参数准备
		int hullcout = (int)hull.size();//凸包的边数
		Point point0 = points[hull[hullcout - 1]];//连接凸包的座标点
		//依次连接随机点,绘制凸包
		for (int i = 0; i < hullcout; i++)
		{
			Point point = points[hull[i]];
			line(testImage, point0, point, Scalar(0, 255, 255), 1, 4);//连接线条颜色为黄色
			point0 = point;
		}
		//输出
		imshow("凸包绘制检测", testImage);
		char key;
		key = (char)waitKey();
		if (key == 27 || key == 'q' || key == 'Q')//按下ESC 或q 或 Q 退出
			break;
	}
	return 0;
}



==================================

运行结果:

运行结果1


注意比较两种座标的输出格式,一个是std::vector格式,另一种是基于Mat的vector格式(矩阵形式)。



============================================================

运行结果2



========================================================================================

运行结果3




发布了54 篇原创文章 · 获赞 28 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章