《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包

本文介绍了OpenCV3中寻找物体凸包的概念和应用,详细讲解了convexHull()函数的使用,包括参数说明,并通过基础及综合示例展示了凸包检测的效果。
摘要由CSDN通过智能技术生成

8.2 寻找物体的凸包

8.2.1 概念

1.给定二维平面上的点集,将最外层点连接起来构成的凸多边形。
2.理解物体形状或轮廓的一种比较有用的方法是计算一个物体的凸包,然后计算其凸缺陷(convexity defects)例如,图中A-H区域是凸包的各个”缺陷”:
                在这里插入图片描述
3.函数:convexHull()函数
4.函数原型:

void convexHull(InputArray points,OutputArray hull,bool clockwise=false, bool returnPoints=true)

5.参数说明:
(1)输入的二维点集,Mat类型或std::vector
(2)输出参数,找到的凸包,返回的hull是points中点的索引
(3)操作方向标识符,为真时输出凸包为顺时针方向,否则逆时针
(4)操作标识符,默认true,标志为真时函数返回各凸包的各个点,否则返回凸包各点的指数,输出数组是std:vector时此标志忽略

8.2.2 示例程序

1. 凸包检测基础

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{
   
	//初始化变量和随机值
	Mat image(600, 600, CV_8UC3);
	RNG& rng = theRNG();
	//循环,按下ESC退出程序,否则有键按下便一直更新
	while (1)
	{
   
		//参数初始化
		char key;
		int count = (unsigned)rng % 100 + 3;//随机生成点的数量
		vector<Point>points;//点值
		//随机生成点坐标
		for (int i = 0; i < count; i++)
		{
   
			Point point;
			point.x = rng.uniform(image.cols / 4, image.cols * 3 / 4);
			point.y = rng.uniform(image.rows / 4, image.rows * 3 / 4);
			points.push_back(point);
		}
		//检测凸包
		vector<int>hull;
		convexHull(Mat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值