visual studio 2015中使用opencv时遇到的一些问题

        前记: 在使用VS做视觉库的使用时,经常会遇到各种各样的问题,很多问题都可能会重复遇到,有些问题花好大力气搞定了,下次遇到了忘了又得重新弄。所以还是写个博客记录一下,保持好习惯。也包含一些Qt配置的问题。

        反正遇到问题再不断更新上来,主要是给自己看,也提供一个参考

(一)问题1. 无法查找或打开PDB文件

       就比如:“已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开PDB文件

     至于啥是PDB,参考王建忠老师的博客  https://blog.csdn.net/wangjianzhongfj/article/details/7339172

      这个问题是相当常见了,我都不知道遇到过多少回了,这个就是VS里符号服务器加载的问题

visual studio 2015中使用opencv时遇到的一些问题

 解决方案:具体的方案如下

        点击菜单里的 调试-》选项

        勾选 启动源服务器支持   (默认是没有勾选的)

visual studio 2015中使用opencv时遇到的一些问题

       然后再点击下方的符号

      勾选Mircrosoft符号服务器   (默认是没有勾选的)

visual studio 2015中使用opencv时遇到的一些问题

然后重新运行一下,就会先加载符号了。

visual studio 2015中使用opencv时遇到的一些问题

当然也可以看到还是有一些opencv的没有查找到

这些不会影响程序的直接运行结果。

(二) 无法打开ui_qtguifig2.ui

    利用VS2015+QT designer5.9.6制作界面时,创建完项目有时总会出现这个提示,导致无法顺利运行。

visual studio 2015中使用opencv时遇到的一些问题

   解决方案

    这种一般是没有编译成,没有注册到列表中,这个时候你会发现右键点击ui文件编译解决不了问题。

   在Qt VS Tools选择卡中中选择“Convert custom build steps to Qt/MSBuild”,然后再编译XXXXX.ui,编译通过,在GeneratedFiles文件夹下,顺利生成“ui_XXXXX.h”文件,接着生成整个项目,就不会报前面提到的两个错误了。

visual studio 2015中使用opencv时遇到的一些问题

(三) 检测到RuntimeLibrary的不匹配项,值“MTd_StaticDebug"不匹配

    这个问题我也是第一次遇到,在一台新电脑上折腾时,一下出来264个错误,我只截了一部分呢

   第一反应就是opencv配置出问题,但也没发现啥。

visual studio 2015中使用opencv时遇到的一些问题

  解决方案

   查询了很多资料,都说是Debug的依赖项和Releas的混用了,以后类似的问题可以注意这个。

  但是这个不是这个原因,我反复检查了依赖项,发现没有任何问题。注意到StaticDebug,意识到可能是静态库的问题

    最后发现是库文件包含目录里,除了lib以外,还自作聪明的添加了staticslib,删除这个目录包含就没这个问题了,其实我以前在其他版本也包含过,没出过错,可能是版本文件问题。

    遇到这类的问题,一定是opencv配置出了错,反复检查,参考 最新的Opencv2.4.13.6在Visual studio 2015下的配置(win7-64位)

(四) 未加载opencv_core2413.pdb

       终于要说到这个烦人的问题了,当时困扰了我特别久,百度光看到问题没找到答案。

visual studio 2015中使用opencv时遇到的一些问题

    解决方案

      其实当时遇到这个问题解决不了,我就觉得应该用cmake把opencv编译一下生成pdb文件,直接把整个编译好的文件拷到项目中,连路径都不用折腾。但当时cmake失败了(回头会写这个)。

     后面在百度的四五页的答案中,终于有人提到了类似的,说直接把这个文件拷到项目文件下或是系统文件里,肯定能直接加载。

    为了以后再出现这种问题,我直接把所有的库文件都拷到了系统目录了。x64系统的是c:/Windows:/SySWOW64,32位系统的是c:/Windows:/System32,如下图路径。拷过去之后重启电脑就可以了。也可以拷到项目文件目录里。回头还是想编译一波。

visual studio 2015中使用opencv时遇到的一些问题

测试代码

     再贴一个测试代码,用来测试一下问题

#include<opencv2\opencv.hpp>

using namespace cv;

int main()

{

Mat picture = imread("test.jpg"); //图片和test.cpp文件放在同一个文件夹下

imshow("测试程序", picture);

waitKey(0);

}