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的设置了。

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

  • 相关阅读:
    #include< >和#include“ ”的区别
    第2章 基础语法 -- 运算符
    hive on spark的安装及问题
    第2章 Python基础语法 -- 数据类型
    第2章 Python基础语法--Hello python
    IT资源专业搜索-www.easysoo.cn
    学习英语
    zookeeper 安装
    Hadoop2.6 Ha 安装
    Hadoop平台安装前准备
  • 原文地址:https://www.cnblogs.com/rongfangliu/p/5240549.html
Copyright © 2011-2022 走看看