zoukankan      html  css  js  c++  java
  • OPENCV3.1+VS 坑我笔记!

    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却有问题,检查环境变量,果然,opencvuildx86vc10,把vc10改成vc12,注销,在登陆就没有问题了。
    其实原因还是我先用的vs10编程,后来换成vs13了,在solution改配置文件都是记得的,但是就是忘了path中dll的设置了。

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

  • 相关阅读:
    vsftp 虚拟用户测试
    RHEL7 MariaDB测试
    安装xenapp后,非管理员连接RDP出现桌面当前不可用的解决方法
    sqrt函数的实现
    O2O、C2C、B2B、B2C
    libsvm使用说明
    如何确定最适合数据集的机器学习算法
    知乎日报:她把全世界的学术期刊都黑了
    逻辑回归应用之Kaggle泰坦尼克之灾
    非均衡数据分布的分类问题
  • 原文地址:https://www.cnblogs.com/rongfangliu/p/5240549.html
Copyright © 2011-2022 走看看