欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决

程序员文章站 2022-07-15 11:29:33
...

本人平台VisualStudio 2015 + Opencv 2.4.9

做的软件中需要根据检测到的轮廓数判断是否为自己想要的图像,程序如下所示,放在一个函数中,当检测到轮廓数 contours.size()>22 时,跳出函数。

vector<vector<Point> > contours(1000); //修改前 vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;
	findContours(imgOC, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
	OutputDebugPrintf("The num of contours is = %d . \n", contours.size());
	
	if (contours.size()> 22)
	{
		return 1;
	}

在做测试的时候,轮廓数比较少时(应该是少于170左右),程序运行正常,能够成功return 1。当检测下面这幅图时,检测到的轮廓数为232,程序运行崩溃,提示:有未经处理的异常:将一个无效参数传递给了将无效参数视为严重错误的函数。网上找了很多帖子,可自行百度:opencv findContours崩溃或内存溢出,都没有解决问题,后来参照一种方法,通过先给contours分配一个比较大的空间:为了保险,给了1000

vector<vector<Point> > contours(1000);
算是解决问题了。这应该是opencv中的一个BUG吧,这块更深层的东西不是很懂,如果有知道的大神可以解释一波。

虽然提前给contours分配了1000的空间,但是执行完findContours后contours.size()的大小其实变成了实际图像中的轮廓数,所以不用担心前面的1000对结果有影响。实际轮廓数如果大于1000.那又是另外一个问题了。


PS:只能说这是解决问题的一个方法,但并不是很好。

更新:

之后根据网上的资料,将Opencv源文件在自己电脑上重新编译,好像也能解决问题。


Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决  

测试图片

Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决

错误提示