OpenCV findContours导致程序崩溃和相关使用问题
2017-03-17 15:10
691 查看
OpenCV新手上路,官网下载了一个OpenCV3.2.0版本,在VS2013上编程。安装各种教程配置好环境后开始研究。第一个任务是数码管数字识别。找了一张图片,开始读取灰度图,二值化,膨胀(数码管数字笔画是不连的,为了轮廓提取方便需要进行膨胀使得数字笔画相连),轮廓提取,数组分割,识别。。。
但是在轮廓提取过程发生了问题,主要是findContours()函数惹的祸,一运行到这个函数程序就崩溃,内存溢出。
应该是contours和hierarchy传到函数形参时发生错误。从网上查找了各种解决方案,但是都没用,主要的方案如下:
1. 在配置属性->常规->MFC的使用中,将在静态库中使用MFC改为在共享DLL中使用MFC;
2. 项目-属性-配置属性-C/C++-代码生成-运行库,将其改为“多线程调试(/MTd);
3. 变量申明时改为 vector contours(100); Mat hierarchy;
尝试过上述方法,但均宣告失败。各种尝试之下发现Release下可以出结果,之前都是Debug。可惜Release时在程序结束时会提示程序有bug,但至少还能有个结果看看。
后来发现,OpenCV3.2.0版本的…\opencv\build\x64文件夹下只有vc14一个文件夹,而vc14代表VS2015,而我用的VS是2013版的,环境配置也是按照vc14配置的。于是,我把OpenCV降级成3.1.0,\build\x64文件夹下有vc12和vc14两个文件夹(vc2013代表vs2013),重新配置环境后,程序就可以顺利运行了。
在提取数字分割过程中又发现了第二个问题:
一幅二值化图像image_bin:
然后进行腐蚀操作,image_dil结果如下:
findContours进行提取轮廓后,再次输出腐蚀后的图像,发现腐蚀后的图像只剩下一层淡淡的外部轮廓:
如果对轮廓提取后的腐蚀图像进行数字提取,得到悲催的结果:
如果要想得到正确的结果,必须对二值化图像进行提取:
But!!!之前在用OpenCV3.2.0编程时,一模一样的程序,3.2版本可以正常地提取腐蚀后的图像,不会只有一个淡淡的轮廓。
但是在轮廓提取过程发生了问题,主要是findContours()函数惹的祸,一运行到这个函数程序就崩溃,内存溢出。
vector<vector<Point> > contours; vector<Vec4i> hierarchy; findContours(image_dil, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE); // image_dil是膨胀后的图片信息,Mat类型
应该是contours和hierarchy传到函数形参时发生错误。从网上查找了各种解决方案,但是都没用,主要的方案如下:
1. 在配置属性->常规->MFC的使用中,将在静态库中使用MFC改为在共享DLL中使用MFC;
2. 项目-属性-配置属性-C/C++-代码生成-运行库,将其改为“多线程调试(/MTd);
3. 变量申明时改为 vector contours(100); Mat hierarchy;
尝试过上述方法,但均宣告失败。各种尝试之下发现Release下可以出结果,之前都是Debug。可惜Release时在程序结束时会提示程序有bug,但至少还能有个结果看看。
后来发现,OpenCV3.2.0版本的…\opencv\build\x64文件夹下只有vc14一个文件夹,而vc14代表VS2015,而我用的VS是2013版的,环境配置也是按照vc14配置的。于是,我把OpenCV降级成3.1.0,\build\x64文件夹下有vc12和vc14两个文件夹(vc2013代表vs2013),重新配置环境后,程序就可以顺利运行了。
在提取数字分割过程中又发现了第二个问题:
一幅二值化图像image_bin:
然后进行腐蚀操作,image_dil结果如下:
findContours进行提取轮廓后,再次输出腐蚀后的图像,发现腐蚀后的图像只剩下一层淡淡的外部轮廓:
如果对轮廓提取后的腐蚀图像进行数字提取,得到悲催的结果:
如果要想得到正确的结果,必须对二值化图像进行提取:
But!!!之前在用OpenCV3.2.0编程时,一模一样的程序,3.2版本可以正常地提取腐蚀后的图像,不会只有一个淡淡的轮廓。
相关文章推荐
- FindContours()函数使用时导致的程序崩溃问题的解决方案
- Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决
- Opencv中导致内存增加的cvFindContours释放问题
- 规避QT4.8.5版本下ocx(dll的情况下)使用QNetworkAccessManager导致程序退出时产生的崩溃问题
- 记32位程序(使用3gb用户虚拟内存)使用D3DX9导致的一个崩溃的问题
- opencv findContours使用问题
- linux 使用不安全的sprintf函数,存储字符越界导致程序莫名崩溃问题
- MFC中使用FindContours()函数使用时导致的程序崩溃问题的解决方案
- vs+opencv中findcontours崩溃的问题
- MFC项目使用webbrowser控件,点击载入的页面里的文件下载链接后导致程序的崩溃问题的解决方案
- 最近在探讨关于缓冲区溢出的相关问题,各位大侠帮忙看看这个程序,两个for循环导致内存内容不一样,其中的玄妙在哪里?我是嫩草,谢啦谢啦~~
- opencv使用cvFindContours提取联通域
- 使用coredata导致的版本更新后程序crash的问题
- Opencv中cvFindContours函数使用
- 格式程序VC中scanf/sscanf不支持%hhx格式,若使用将可能导致程序错误甚至崩溃
- 使用coredata导致的版本更新后程序crash的问题
- WriteFile导致程序崩溃的问题
- 解决使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题
- PHP中使用foreach和引用导致程序BUG的问题介绍
- 使用std::sort()排序导致程序core问题分析