OpenCV 使用convexHull 函数遇到的一些问题

本文介绍了如何在图像处理中正确地使用凸包检测及缺陷计算的方法。文章强调了使用convexHull和convexityDefects函数时需要注意的关键点,例如确保轮廓点的数量足够以形成有效的凸包,并且正确声明变量类型。此外,还提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于任意contour都能接受代码(仅限于图片)。
1.首先,若要使用convexityDefects  则必须声明 contour_hull的形式为
vector<int> contour_hull(contour.size());
否则会报错,这点必须注意。
2.其次,一个可能的愚蠢问题来自 contour的size是不够的。
contour.size() > 3
这个就是说,不够四个点,没有凸包,原理很好理解。但也是大家最容易犯的错误。切记。
这条报错基本处在isContourConvex这个函数上。

编程中最主要的还是要关注具体问题的逻辑,不光是代码没问题。
编译能通过,只是说代码基础逻辑没问题,但业务逻辑未必符合。

下面是代码。

int ConvexHullTest(vector<Point> contour)
{
	vector<int> contour_hull(contour.size());
	Mat contour_image(contour_hull);
	if (contour.size() > 3)
		cv::convexHull(Mat(contour), contour_hull, false);
	else
		return 0;
	vector<Vec4i> defects(contour.size());
	if (!isContourConvex(contour) && contour_hull.size() > 3) {
		//cout<<"轮廓不是凸包"<<endl;
		convexityDefects(
			contour,
			Mat(contour_hull),
			defects
		);
		return defects.size();
	}
	else
		return 0;
	//contour_hull.swap(contour_hull);
	//defects.swap(defects);
}


添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值