OPENCV3.1+VS 坑我笔记!

本文针对使用OpenCV库时遇到的内存错误问题进行了详细的分析与解答,包括findContours函数调用失败、contourArea和minAreaRect函数崩溃及程序退出时报错等问题,并给出了相应的解决方法。

1、调用findContours()函数程序崩溃。

原因:

>>分析opencv源代码,跟踪测试,进入工程:opencv_imgproc 发现findContours函数 是调用 _findContours函数来实现的,跟踪进去,发现contours.resize(total) 就会失败崩溃,应该是系统DLL调用配置问题,进一步不知道原因了…

>>这是因为,resize的时候,vector申请的默认内存不够了,vector要重新申请内存,而vector默认内存是在DLL外申请的,DLL与你的程序是两个内存空间,现在要在DLL中改你程序的内存,肯定崩溃。解决方法是,vector的变量在传入DLL前,先用resever申请足够大的空间

解决方法:

>>项目-属性-配置属性-C/C++-代码生成-运行库,将其改为“多线程调试(/MTd)”。

>>把 _findContours 源函数代码 放到dll里面,然后改一个名字,就调用这个函数,求轮廓就调用这个函数就可以了。(不知如何操作,囧)

 

2、调用contourArea(contours[i])和minAreaRect(contours[i])崩溃

>>vector<vector<Point> > contours,不知道什么原因……囧

解决方法:改为contourArea(Mat(contours[i]))和minAreaRect(Mat(contours[i]))

 

3、程序执行到最后,退出的时候,vector析构会报错

>>出错的根本原因是dll分配的heap和主程序的不一致,在我准备重新编译opencv时突然想到,在环境变量path中是有设置opencv dll的地址,我用vs2010没有问题,vs2013却有问题,检查环境变量,果然,opencv\build\x86\vc10,把vc10改成vc12,注销,在登陆就没有问题了。
其实原因还是我先用的vs10编程,后来换成vs13了,在solution改配置文件都是记得的,但是就是忘了path中dll的设置了。

解决方法:重新配置程序的编译环境,依赖库什么的,都重新搞一遍

转载于:https://www.cnblogs.com/rongfangliu/p/5240549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值