概述
没用到MFC,网上的方法:
1,在配置属性->常规->MFC的使用中,将在静态库中使用MFC改为在共享DLL中使用MFC。无效
2,多线程调试(/MTd)改为多线程DLL调试(/MDd)。无效
3,直接将:_findContours( Mat& image, vector<vector >& contours,
vector* hierarchy, int mode, int method, Point offset )
提出来,放到dll中改一个名字,再调用OK了。好麻烦
另外:1,2两种方法不会报错,但内存泄露。治标不治本。
最后我是这么解决的:
vector<Mat> contours(100);
Mat hierarchy;//这句写成Vector<Vec4i> hierarchy(100)也行
findContours( BW, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE );
原因:
我跟踪进去发现是vector析构时产生的问题。在我的程序中是findContours的第三个参数,即hierarchy析构时报错。最后是在
void _Deallocate(void * _Ptr, size_t _Count, size_t _Sz)中调用
::operator delete(_Ptr);时报错
这个不是opencv的问题,是调用dll的问题,dll中给vector分配成员空间,无论你是传引用,还是指针,只要vector的初始化容器大小,放不下成员,在dll中就会给vector增加空间,故解决方法如下:
vector< vector > contours(1000);
findContours(canny_output, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );预先在自己程序中分配好,1000只是个估值,根据实际大小最大值来设置
6.25更新:
不要把stl中的东西在dll中传递,例如vector和string
http://blog.csdn.net/huapeng_guo/article/details/8276868
最后
以上就是开放酸奶为你收集整理的opencv中findContours导致crash的全部内容,希望文章能够帮你解决opencv中findContours导致crash所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复