零、前言
初来实验室,接触的第一个项目就是用Qt与OpenCV做的图像识别。本来查了一下教程,挺简单的一个配置环节,哪知道配置的过程一波三折。但是这次曲折的过程,却也让我有所收获。
一、Qt与OpenCV环境的配置
配置环境的是在官网下载Qt和OpenCV了,Qt的官网下载地址是:https://www.qt.io/download/,OpenCV的官网下载地址是:https://opencv.org/releases.html。
一开始我没有注意版本问题(于是隐患就此埋下),我直接下载了比较新的两个版本,Qt5.8与OpenCV3.4,我用的IDE是VS2017,Qt配置步骤如下:
1.运行qt-opensource-windows-x86-msvc2015_64-5.8.0,一步步安装即可;
2.打开VS的工具→扩展和更新,搜索Qt Visual Studio Tools,安装;
3.将Qt文件夹下的bin路径配置到系统的环境变量中;
4.重新打开VS,此时已经出现了一个新的选项卡→Qt VS Tools,打开该选项卡的Qt Options选项,点击Add按钮,选中msvc文件夹并确定即可。
然后是OpenCV,这个配置看起来更简单,步骤如下:
1.打开安装包,一路点确定即可;
2.将OpenCV文件夹下的build\x64\vc15\bin路径配置到系统的环境变量中。
做到这里都还是比较顺利的,此时我重启了计算机,使环境变量生效,准备配置项目属性。、
二、在项目中配置Qt
项目属性的配置也不算复杂,打开属性管理器,右键本项目选择属性,在VC++目录中的包含目录栏,添加Qt和OpenCV的include文件夹路径,在库目录栏添加OpenCV的lib文件夹路径,没有其他步骤了,但是当我编译代码的时候,就开始报错了。
由于我下载的Qt与OpenCV的版本跟项目所用的版本相差太远,果不其然地报错了。于是我下载了与项目版本一致的Qt4.8.6,并将项目属性中的include改为4.8.6版本的路径,但是一经编译,还是报错。这就奇怪了,版本我也按照项目的版本设置在项目属性中了,怎么还是报Qt的错呢?
仔细检查过后发现,Qt Options选项中的地址配置的依然是Qt5.8.0的路径,这就难怪了。而且令人窒息的是,Qt Options选项并不能配置4.8.6的地址,换而言之,4.8.6的Qt,没有msvc这个文件夹,因此没有办法配置到Qt Options,这就麻烦了。
经过查阅资料,我发现5.6版本之前的Qt是通过Qt Visual Studio Add-in来配置的,而5.6及以后的版本则是通过Qt VS Tools,于是我下载了一个Add-in,然而安装了之后完全没有用,VS依然只有Qt VS Tools选项卡,而不是Add-in对应的Qt选项卡。 再研究好一阵,发现项目用的是VS2010来开发的,玄机可能就在这里。
由于官网遛了一圈没有发现旧版本的VS,在刘师兄的建议下,我在ITellYou上面下载了2010版本的VS,再一次配置过后,传说中的Qt选项卡终于出现了。Qt选项卡的设置就比较简单,地址配置只需要选择它所在的路径即可,不要求有msvc文件夹。这一次终于不再报Qt的错误了,然而OpenCV的错误也终究要面对。
三、在项目中配置OpenCV
这又是一个谜之错误,Qt和IDE的环境中,我在版本问题上吃了亏,面对OpenCV我依然不长记性,一开始面对的问题是计算机位数问题,因为我的计算机是64位,因此我配置环境的时候是按64位配置的,然而项目原本却是在32位的平台上跑,于是又报错了,解决方案是把项目属性→链接器→高级→目标计算机改为MachineX86,并引用32位的OpenCV文件。
由于OpenCV官网没有与项目一致的2.4.6版本,于是我下载了与之版本比较接近的2.4.10版本。此时又出现了dll文件不匹配的问题(附加依赖项不匹配),我于是鬼使神差地把附加依赖项引入的文件改成2.4.10的文件,多退少补,这下不会报不匹配的错了,转而报各种类和函数的错误,好吧,看来还是版本问题,老老实实地去找2.4.6版本来解决问题。
漫漫求索的长路由此开始,这个版本的安装包很邪门地就是找不到,官网是下架了该版本,它之前和之后的版本都有,偏偏这个版本就没有,甚至google上搜也找不到,正当陷入僵局之时,实验室的一位同学突然提醒我,Git上应该有源码。此刻我才醍醐灌顶如梦方醒,而下架了这个版本的OpenCV团队可能也是百密一疏,并没有从Git上撤下这个版本的源码,这下问题就解决了。
四、事后的总结与思考
一切配置完成后,项目正常地编译运行了,于是到这周结束我才正式进入看代码阶段,进度算是相当缓慢了。
关于这个过程我还有几点总结与思考:
1.越怕麻烦就越麻烦,一开始总想着用其他方法来代替,以避免找版本的麻烦,结果适得其反;
2.遇到麻烦不要怕,有麻烦往往意味着有收获,解决问题就是在不断学习;
3.OpenCV为什么要单单下架2.4.6版本呢?是因为有重大Bug因此禁止用户使用吗?为什么我们项目还要选用这个版本呢(这一点是一位朋友跟我聊的时候提醒我的)?
配环境还只是第一步,我希望自己在接下来的项目历程中,可以更高效、更有条理地解决问题与完成任务。如有不到之处,还请各位多指教啦。