版权声明:本文为博主原创文章,未经博主允许不得转载。博客不用于商业活动,博主对博客的使用,拥有最终解释权 
本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 
欢迎关注我的网上图书室: 晨凫追风和 微信公众号:青春当追风

作者:晨凫追风

关于Opencv的一个bug的解决方法

错误:

Opencv配置完之后运行一切都很正常,也愉快的弄了一些demo,然而突然有一天,我心血来潮想要在release下运行一下自己的代码,于是出现了一个很美的画面:

输出窗口显示错误信息:

0x50AA8B98(opencv_highgui249d.dll) (template_example.exe中)处的第一机会异常: 0xC0000005: 读取位置 0xACC6BCCD时发生访问冲突。

0x50AA8B98(opencv_highgui249d.dll) (template_example.exe中)处有未经处理的异常: 0xC0000005: 读取位置 0xACC6BCCD时发生访问冲突。

还有一种情况是:

0x77715B68 处(位于 mouse_movement.exe 中)最可能的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x010AF3C8 处。

0x77715B68 处(位于 mouse_movement.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x010AF3C8 处。

这是在debug下运行错误。

提示内存错误,算是Opencv的一个bug,在Debug下可以运行,在release下却不能运行报错。

介绍一下来龙去脉:

在对Opencv进行配置的时候,配置链接库的时候会有一堆 .lib的文件,其中Debug文件库名有d结尾,release没有d。

如:opencv_video249d.lib—debug库。

opencv_video249.lib—release库。

按照一般的网上配置教程,会出现debug下可以运行,release下不能运行的情况(报错原因是由于字符串读取问题引起的如图像载入不了,内存出现错误,指针错误等情况)。

因为在附加依赖项配置的时候,会优先选择写在前面的那一类lib作为支持的调试方式,一般我们把带d的写在前面,于是就出现了默认在debug下可以载入图像,识别字符串等操作。如果把不带d的写在前面,那就默认release下调试。

解决方法:

在配置的时候就添加一类依赖项,如:就只添加带d的那一类,于是就只支持debug模式下的调试,这时候想要在release下也能调试,就在当前工程的release模式下自己将不带d的依赖项添加进去:【项目】—【属性】—【配置属性】—【链接器】—【输入】—【附加依赖项】,添加即可。

上图:1、选择release模式调试

2、选择当前项目属性

3、添加附加依赖项:把不带d的库添加进去,运用就ok了

4、

至此完成。

感觉在配置的时候只添加一类,只添加带d的或者只添加不带d的库,这样在用到另外一种模式的时候再去修改当前工程的属性配置(并不是之前的固有属性)。这样做让人感觉更加清爽,两个全部添加,毕竟系统只默认在前面的那一种库。

方式二:

添加以下代码:

#ifndef _OPENCV_LIB_
#define _OPENCV_LIB_#ifdef _DEBUG
#pragma comment(lib, "opencv_calib3d249d.lib")
#pragma comment(lib, "opencv_contrib249d.lib")
#pragma comment(lib, "opencv_core249d.lib")
#pragma comment(lib, "opencv_features2d249d.lib")
#pragma comment(lib, "opencv_flann249d.lib")
#pragma comment(lib, "opencv_gpu249d.lib")
#pragma comment(lib, "opencv_highgui249d.lib")
#pragma comment(lib, "opencv_imgproc249d.lib")
#pragma comment(lib, "opencv_legacy249d.lib")
#pragma comment(lib, "opencv_ml249d.lib")
#pragma comment(lib, "opencv_nonfree249d.lib")
#pragma comment(lib, "opencv_objdetect249d.lib")
#pragma comment(lib, "opencv_photo249d.lib")
#pragma comment(lib, "opencv_stitching249d.lib")
#pragma comment(lib, "opencv_ts249d.lib")
#pragma comment(lib, "opencv_video249d.lib")
#pragma comment(lib, "opencv_videostab249d.lib")
#else
#pragma comment(lib, "opencv_calib3d249.lib")
#pragma comment(lib, "opencv_contrib249.lib")
#pragma comment(lib, "opencv_core249.lib")
#pragma comment(lib, "opencv_features2d249.lib")
#pragma comment(lib, "opencv_flann249.lib")
#pragma comment(lib, "opencv_gpu249.lib")
#pragma comment(lib, "opencv_highgui249.lib")
#pragma comment(lib, "opencv_imgproc249.lib")
#pragma comment(lib, "opencv_legacy249.lib")
#pragma comment(lib, "opencv_ml249.lib")
#pragma comment(lib, "opencv_nonfree249.lib")
#pragma comment(lib, "opencv_objdetect249.lib")
#pragma comment(lib, "opencv_photo249.lib")
#pragma comment(lib, "opencv_stitching249.lib")
#pragma comment(lib, "opencv_ts249.lib")
#pragma comment(lib, "opencv_video249.lib")
#pragma comment(lib, "opencv_videostab249.lib")
#endif#endif

重命名为:opencv_lib.h,把该文件放到opencv的包含路径中:...\opencv\build\include\opencv2目录下面,即和 #include <opencv2/opencv.hpp> 在同一个目录,之后只需要包含头文件 #include <opencv2/opencv_lib.h>

就可以在Debug和Release版本之间任意切换

当然要在包含库中把原来的库删除即可

如有不足之处欢迎批评指正,原创作品,转载请注明出处!谢谢!后续的学习总结会陆续推出!欢迎广大爱好者交流!

Opencv学习笔记——release和debug两个模式的运行问题相关推荐

  1. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  2. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  3. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  4. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  5. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  6. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  7. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  8. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  9. OpenCV学习笔记(六)(七)(八)(九)(十)

    OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...

最新文章

  1. Android 读取xml转json,将XML转换为Android中的JSON对象
  2. 澳大利亚科学家开发出可用于脑机接口的新型碳基生物传感器
  3. java redis使用卡死_记一次找因 redis 使用不当导致应用卡死 bug 的过程
  4. 开源 | App 开发神仙工具:帮你抓 Bug
  5. 服务器安装红帽系统进入不图形界面,CentOS 安装图形化界面方法
  6. 吴恩达机器学习练习3:Logistic regression(Multi-class Classification)
  7. Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
  8. bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]
  9. 圈复杂度(Cyclomatic Complexity)-转
  10. iOS的帮助网站(企业包发布)adhoc的测试
  11. linux命令面试题大全,Linux系统命令面试题大全
  12. RationalDMIS 2020 编程技巧
  13. ENVI 5.3 操作Landset8遥感影像预处理问题汇总(1)
  14. test api mis
  15. 划词翻译脚本--AutoHotkey
  16. 找回忘记的ADSL拨号密码
  17. pika详解(五)登录认证及connectionParameters
  18. C++ 快读快输模板
  19. 大数据技术原理——期末复习storm
  20. 刷题!刷题!刷题网!!!

热门文章

  1. UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题
  2. 2018-2019-1 20165323 20165333 20165336 实验五 通讯协议设计
  3. 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思
  4. Oracle执行计划顺序
  5. SSD固态存储大观(二)
  6. tcp/udp socket编程异同
  7. Struts2拦截器简单示例
  8. Exchange系列—使用系统自带的备份工具来备份数据库
  9. hihocoder 1122 : 二分图二•二分图最大匹配之匈牙利算法
  10. hdu 2896 病毒侵袭(AC自动机)