阅读893 返回首页    go 阿里云 go 技术社区[云栖]


VS2015+OpenCV3.3.0+QT5.9.2 Demo

想用QT作为OpenCV的GUI界面,有界面更正式些,但是之前看了几篇博文操作零零碎碎的,这次准备记录下来,靠一段落。记录不是很完整,以后在补充。

笔记目标

  1. 运行一个显示图片QT Demo;
  2. 运行一个显示相机采集图片的QT Demo;
  3. 笔记中复制了很多参考资料里的文字;

准备工作

  • VS2015 - VS2015是可以方便安装VS插件的最高版本,VS2017好多不能安装;
  • OpenCV3.3.0 - OpenCV目前的最高版本;
  • QT5.9.2 - QT5的最高版本;

为OpenCV配置QT

编译OpenCV的时候选择WITH_QT【2】,至于这个选项的作用,可能是指OpenCV的highgui模块本身是否使用Qt,highg使用QT后higngui本身的窗口界面会变成基于Qt的,比原来的要好看一些,而且自动集成了一些图片缩放、保存等功能【2】。(那么原来的highgui使用的是什么GUI技术?)
image
勾选如上图后,点击Configure,得到如下图路径或者通过输入QT搜索得到勾选WITH_QT后重新配置产生的关于QT的项目。
image
但是上图有一个问题,就是QT相关的路径都是Anaconda下的,而我自己安装了是最新的QT5.9.2版本,我不清楚这几个选项的具体作用,不过改成QT5.9.2应该是没错的,于是把Anaconda相关的路径都替换成自己安装的QT5.9.2的路径,如下图所示,因为OpenCV3.3.0当初用CMAKE编译选择的Generator就是Visual Studio 14 2015 win64,所以QT的预编译版本也选择对应版本。
image
再Configure一下,然后再Generate,之后Open Project。
点击Open Project按钮打开生成的VS工程,待其完全载入后即可编译了,需要注意的是,不要使用默认的生成解决方案(F7)进行编译,这样最终得到的install文件夹中的内容是不全的。正确方法是在INSTALL工程上点右键,选择生成,还是选择重新生成吧,单独编译生成此工程【3】。
image
编译时选择的安装路径,如下图
image
编译是选择的生成对象为动态库类型,如下图
image
生成的动态库,如下图
image
不过如果想对OpenCV源码进行**Debug跟踪**,是不能选用.\install文件夹中的库文件的,因为此处缺少**.pdb调试文件**,无法正常Debug。此时需要使用**.\lib**文件夹中的库文件,这时可以正常的跟踪到源代码中,且使用profiler分析代码性能时也可以正确定位到OpenCV内部函数上【3】。

关于库、DLL、lib、pdb概念的理解,我理解库是相对的,如果拿游戏类比,库就好比是武器装备库,而每件武器可能又有自己的配件库,库的内容不同大小不同,但是调用方式是相同的【4】。参考资料【4】给出的最小原型动态链接库可以和QT库、OpenCV库在调用配置上等价。
这里只说下对OpenCV的DLL的理解,更准确的参考资料【5】。
OpenCV其实是一个一个的功能模块,每个模块对应一些CPP文件和H文件,CPP文件经过编译就生成DLL(而普通软件生成EXE)和LIB(这是用于LINK的,可以理解为一个DLL的伪静态LIB占位符,否则的话就是静态LIB了)。
而头文件H文件就被搬运到一个专门的INCLUDE目录。
使用库的人叫做客户端Client或者应用程序Application,他们要使用库的功能,其实就是使用那些模块函数了,就要配置项目。配置的话也无非3个方面,其中第3个方面又分为2个,所以一共4个地方需要配置:

  1. 头文件的路径;
  2. DLL的路径,由于DLL是程序运行时的才调用,所以DLL路径假如系统环境变量;
  3. 占位符伪LIB的路径,这个特殊点,要配置2个方面,其实也不难理解。一个就是LIB的路径,一个就是要该路径下的哪些LIB,全要的话自然生成的程序体积就大了。不过对于DLL来说,占位符的伪LIB体积不大多了也没事。

参考资料

【1】VS2015搭建Qt 5.7开发环境
【2】OpenCV与Qt结合使用
【3】VS2015下编译OpenCV 3.1
【4】Walkthrough: Creating and Using a Dynamic Link Library (C++)
【5】DLLs in Visual C++
【6】How to build applications with OpenCV inside the "Microsoft Visual Studio"
【7】将 Qt 5.6 集成至 VS2015
【8】详解 QT 框架中快速应用OpenCV 基于图片 上篇

最后更新:2017-10-25 22:03:42

  上一篇:go  hive中的排序和分组
  下一篇:go  MySQL运维实战(三)之 too many connection