Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决
来源:互联网 发布:php中字符串的截取 编辑:程序博客网 时间:2024/06/13 00:22
本人平台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源文件在自己电脑上重新编译,好像也能解决问题。
测试图片
错误提示
阅读全文
0 0
- Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决
- 利用OpenCV的findContours作轮廓检测
- opencv 轮廓查找 findContours
- opencv程序五:轮廓检测
- OpenCV中findContours查找后获得轮廓数 轮廓包含点数 各点坐标的实践
- opencv程序九:轮廓检测均衡化
- opencv程序十五:实时视频轮廓检测
- OpenCV findContours 轮廓检索函数及轮廓特征计算
- 使用OpenCV的函数findContours提取轮廓并绘制轮廓
- [转]opencv轮廓提取(findcontours函数详解)
- OPENCV轮廓提取findContours和drawContours
- OPENCV轮廓提取findContours和drawContours
- opencv floodfill与findContours结合提取轮廓
- OPENCV轮廓提取findContours和drawContours
- OpenCV 轮廓检测
- OpenCV轮廓检测
- OpenCV轮廓检测
- OpenCV轮廓检测
- html表单 提交时对用户名和密码进行验证
- 基础集合论 第一章 7 交集 8 差集
- String类的简单实现
- windows下charles工具抓包教程https
- 用jq写的随机飘物体的效果
- Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决
- Understanding the JVM(六)判断哪些内存需要回收
- C++矩阵操作
- .net core 2.0 下,用C#自创实现MysqlHelper的ExecuteDataTable 功能[2017-10-30]
- http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/
- 对于进入社会的程序员来说,学历真的很重要……么?
- html菜单的折叠 图标+-的变化
- 系统如何将一个信号通知到进程
- stackWithMIn