您的位置:首页 > 运维架构

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

2017-10-30 13:03 591 查看
本人平台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源文件在自己电脑上重新编译,好像也能解决问题。


  

测试图片



错误提示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐