博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OPENCV3.1+VS 坑我笔记!
阅读量:5349 次
发布时间:2019-06-15

本文共 954 字,大约阅读时间需要 3 分钟。

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

你可能感兴趣的文章
SSRS 报表 如何匿名查看
查看>>
JVM内存管理机制
查看>>
centos 安装Mysql
查看>>
简单通用Ajax函数
查看>>
【Android】ListView监听上下滑动(判断是否显示返回顶部按钮
查看>>
HBASE的MAPREDUCE任务运行异常解决办法,无需CYGWIN,纯WINDOWS环境
查看>>
禅道在docker上部署与迁移
查看>>
关于继承、封装、多态、抽象和接口
查看>>
c27---typedef
查看>>
android WebViewClient和WebChromeClient
查看>>
div+css清除浮动代码
查看>>
017Python路--解释器
查看>>
idea2019中utf-8乱码问题
查看>>
docker应用-3(搭建hadoop以及hbase集群)
查看>>
Java学习:标准类
查看>>
Python:pip 和pip3的区别
查看>>
ACCESS+ASP数据库乱码的解决
查看>>
关于PHP时间的
查看>>
java TCP/IP socket
查看>>
day05接口
查看>>