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

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

  • 相关阅读:
    session一致性架构设计实践.
    从"嘿,今晚..."谈消息安全传输中的技术点
    跨公网调用的大坑与架构优化方案
    “配置”也有架构演进?看完深有痛感
    TCP接入层的负载均衡、高可用、扩展性架构
    究竟啥才是互联网架构“高并发”
    12.Nodes
    11.Layers, Containers and Interfaces
    10.Nodes and Bindings
    9.Hierarchy Editor
  • 原文地址:https://www.cnblogs.com/rongfangliu/p/5240549.html
Copyright © 2011-2022 走看看