【小白】Open-CV 学习笔记 - 8.2 寻找和绘制物体的凸包convexHull()

本文介绍了计算机图形学中的凸包(Convex Hull)概念,它是包含所有点的最小凸集。在二维空间中,凸包可以理解为包围所有点的最小凸多边形。OpenCV提供了convexHull()函数来寻找和绘制物体的凸包,并详细解释了其参数和使用示例。
摘要由CSDN通过智能技术生成

概述

凸包(Convex Hull)是一个计算几何(图形学)中的概念,在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。
X的凸包可以用X内所有点(x1, x2….xn)的线性组合来构造。在二维欧几里得空间中,凸包可以想象为一条刚好包着所有点的橡皮圈,用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点接!

API函数:

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

参数解释

  • points:输入的二维点集,Mat类型数据即可
  • hull:输出参数,用于输出函数调用后找到的凸包
  • clockwise:操作方向,当标识符为真时,输出凸包为顺时针方向,否则为逆时针方向。
  • returnPoints:操作标识符,默认值为true,此时返回各凸包的各个点,否则返回凸包各点的指数,当输出数组时std::vector时,此标识被忽略。
//寻找物体的凸包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 / 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值