Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决
2017-10-30 13:03
591 查看
本人平台VisualStudio 2015 + Opencv 2.4.9
做的软件中需要根据检测到的轮廓数判断是否为自己想要的图像,程序如下所示,放在一个函数中,当检测到轮廓数 contours.size()>22 时,跳出函数。
在做测试的时候,轮廓数比较少时(应该是少于170左右),程序运行正常,能够成功return 1。当检测下面这幅图时,检测到的轮廓数为232,程序运行崩溃,提示:有未经处理的异常:将一个无效参数传递给了将无效参数视为严重错误的函数。网上找了很多帖子,可自行百度:opencv findContours崩溃或内存溢出,都没有解决问题,后来参照一种方法,通过先给contours分配一个比较大的空间:为了保险,给了1000
虽然提前给contours分配了1000的空间,但是执行完findContours后contours.size()的大小其实变成了实际图像中的轮廓数,所以不用担心前面的1000对结果有影响。实际轮廓数如果大于1000.那又是另外一个问题了。
PS:只能说这是解决问题的一个方法,但并不是很好。
更新:
之后根据网上的资料,将Opencv源文件在自己电脑上重新编译,好像也能解决问题。
测试图片
错误提示
做的软件中需要根据检测到的轮廓数判断是否为自己想要的图像,程序如下所示,放在一个函数中,当检测到轮廓数 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作轮廓检测
- vs+opencv中findcontours崩溃的问题
- FindContours()函数使用时导致的程序崩溃问题的解决方案
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- 解决Android图片剪切返回崩溃问题
- HED图像边缘检测-程序运行的问题解决方法
- 关于winXP和win7,vs2010,opencv2.3,运行程序,报错“计算机丢失tbb_debug.dll”问题解决办法 .
- opencv序列结构CvSeq和轮廓提取cvFindContours的简单运用
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- opencv轮廓检测之椭圆检测-----算法篇(2)---Sobel---自定义卷积核问题
- Android2.3下PopupWindows初始化时NullPointException导致程序崩溃的问题解决
- opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子
- HibernateDaoSupport的getHibernateTemplate.find()方法带参查询返回结果是nul问题解决
- 友盟分享成功,返回后,程序崩溃的问题
- 关于解决VS2008ODBC连接MySQL时“绑定所有列“程序崩溃问题
- 使用OpenCV的findContours获取轮廓并切割(python)
- 解决打开Android SDK Manager时出现“.....\sdk\tools\lib\\find_java.exe不是内部或外部命令,也不是可运行的程序或批处理文件“问题
- listView数据过多,或点击过于频繁崩溃问题解决(防止按钮重复点击)
- Opencv通过cvFindContours找到的轮廓图时暗时亮