您的位置:首页 > 编程语言

编程经验:不同版本OpenCV之间并存可能引起的bug~

2015-03-05 18:57 375 查看
本文说一说我使用opencv遇到的一个bug,以及解决办法。

1. 问题描述

相信使用过opencv的不少朋友,遇到过如下问题,在调用最常用的函数,例如读取图像的imshow函数,会发现读取文件失败。并且,编译成功,但在在调试的时候,发现单步进入低版本opencv的同名函数中,甚至是在运行的时候,出现中断提示,头都大了。
再如,得到了一份源代码, 想运行起来跑跑看,但是发现,这份源代码是基于高版本的opencv(下文说成opencv249),在本机上,经常使用的是低版本的opencv(下文说成opencv210),配置完毕,发现编译可以通过,但在运行的时候,会发现许多莫名其妙的错误。例如,提示你缺少cv210d,检查配置,明明添加的是opencv249。还以为是VS2010抽风了呢。

2. 问题解决

根据我使用VS2010的经验,这类问题的主要原因如下:
1. VS2010通用属性配置问题。VS2010和VS2008的配置有一些不同,尤其是VS2010提供了通用属性配置,其实就相当于VS2008工具选项里面的配置而已,通用属性要在属性目录中配置,适用于所有添加项目的"默认配置"。如果通用属性中添加了低版本的opencv相关信息,那么就可能导致项目配置失灵的情况。
通用属性配置如下:



注意,一定要双击Microsoft.Cpp.Win32.user,而不是 Debug
| Win32 文件夹,后者还是具体项目的配置属性,前者才是通用全局属性!!

2. 环境变量配置问题。可以在环境变量中的path选项设置多个opencv的bin,但是切记,要将dll的debug和release版本分开添加,如果两种dll文件都混在一起,会引起问题。配置好之后,要对VS2010进行重启,有童鞋说,要对电脑进行重启,这个没必要。

3. 项目中添加了其他库,这些库依赖了低版本的opencv库。这个问题比较奇葩, 有时候会想不到,要将当前项目依赖的其他库中与低版本opencv相关的一切信息去除掉才可以。

4. 不幸的是,在Microsoft.Cpp.Win32.user配置的路径,竟然适用于所有解决方案的所有工程,而不是当前解决方案的所有工程,这一点十分不方便,不知有哪位童鞋有更好的办法?

5. 配置好路径之后,会发现头文件还是无法进入,这个时候需要重新启动VS2010,记得保存哦~

3. 总结

同一个解决方案,添加多个项目,是我们经常要做的事情,而做计算机视觉基本上离不开opencv,遇到opencv的问题,一个是耗时间不值得,一个是问题重复性很强。完全可以一次解决,终身受益。我说的是我个人的经验,还请各位朋友们补充指正,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: