Opencv2.4.9+Qt5.6+MinGW
前导
MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。
VC运行库,是Visual C++的运行库。很多程序在编制的时候,使用了微软的运行库,大大减少了软件的编码量,却提高了兼容性。但运行的时候,需要这些运行库。这些运行库简称就是MSVC。
Windows下MSVC,Linux下GCC,而QT可以从Linux移植到Windows,所以采用GCC==>minGW
正因为QT采用的库和VS的不一样,所以从OPENCV下载下来的库文件并不能直接给QT使用,所以我们需要运用CMAKE产生配置文件,让minGW按照配置文件生成QT可用的库文件。
安装
参考博文:
https://blog.csdn.net/zhaocj/article/details/38944037 https://blog.csdn.net/u014291399/article/details/44992917
安装
Cmake build opencv2.4.9 时遇到的问题和解决方法
-
点击CMake(cmake-gui)图标,执行CMake,在Where is the source code和Where to build the binaries栏中分别为D:SoftwarePlace/opencv/soureces和D:SoftwarePlace/opencvbuild1。
D:SoftwarePlace/opencvbuild1为编译后库文件所存放的目录(可以自定义),需要自己创建该目录(如果没有,则会有提示,选择Yes创建)。
然后点击configure按钮,打开新的窗口,
在Specifythe generator for this project下选择MinGWMakefiles,
然后选择Specify native compilers,
点击Next按钮,打开新的窗口,
在C一栏中填写D:/SoftwarePlace/QtPlace/Tools/mingw492_32/bin/gcc.exe,
在C++一栏中填写D:/SoftwarePlace/QtPlace/Tools/mingw492_32/bin/g++.exe,Fortran不填写, 然后点击Finish按钮。 -
Configure 后出现 CMAKE_MAKE_PROGRAM is not set。
解决:先勾选Grouped和Advanced,
然后在下面的将CMAKE_MAKE_PROGRAM 项设置为 Qt的安装路径下,路径:Tools/mingw492_32/bin/mingw32-make.exe,重新点击Configure,
-
出现
不能勾选WITH_IPP,勾选WITH_OPENGL和WITH_QT
再次点击configure -
出现
先不管(后面发现把mingw32-make添加到系统环境变量后,重新configure,这里的红色会消失) -
出现
解决:添加mingw32-make到系统环境变量:右键我的电脑->属性->高级系统设置->高级->环境变量->编辑path,具体为 ;+路径。例如,我的路径为(搜索mingw32-make的路径)D:\SoftwarePlace\QtPlace\Tools\mingw492_32\bin
所以path那里编辑 ;D:\SoftwarePlace\QtPlace\Tools\mingw492_32\bin
然后确认即可(别忘记前面有分号)。
然后再到第4步那里重新configure,发现红色的部分没有了,然后重新generate.
完美 -
同时按下windows键+R,在弹出的对话框中输入cmd,打开系统命令行终端,进入到前面build的目录下(我的为cd D:SoftwarePlace/opencvbuild1)执行mingw32-make命令,这会需要很长时间
-
编译过程出现问题
网上解决方法:
原文链接:http://answers.opencv.org/question/62580/not-able-to-build-opencv3-rc1-with-debug-build-type/
在自己笔记本上编译未发现任何问题,但在公司电脑上,cmake过程中没有报错,编译却出现了videoIO模块怎么都编译不过去的现象,千辛万苦才找到解决方法:在opencv的源码文件(本人的路径D:\SoftwarePlace\Opencv\opencv\sources\modules\videoio\src)
cap_dshow.cpp中添加下面一句:
#define STRSAFE_NO_DEPRECATE -
下面开始配置opencv的Qt开发环境。
opencv源码编译好后,得再次添加系统的Path环境变量,内容为:
D:\QtPlace\5.6\mingw49_32\bin;
D:\SoftwarePlace\OpeCV4Qt\bin
其实我们需要的只是编译后D:SoftwarePlace/opencvbuild1目录下的bin
和lib文件夹,在D盘先建一个目录OpenCV4Qt,
将D:SoftwarePlace/opencvbuild1目录下的bin目录和lib和目录D:\SoftwarePlace\Opencv\opencv\build\include目录共3个目录复制到该目录下。今后我们在用Qt创建opencv工程的时候,都要在工程名称.Pro上添加以下目录和库。
//QT5.6 添加opencv库和目录
INCLUDEPATH += D:\SoftwarePlace\OpeCV4Qt\include\
D:\SoftwarePlace\OpenCV4Qt\include\opencv\
D:\SoftwarePlace\OpenCV4Qt\include\opencv2\
LIBS+=D:\SoftwarePlace\OpenCV4Qt\lib\libopencv_*.a
安装到此就结束了,库的添加自己可以按照库目录自己选择那些必须的,以后用到别的再选择添加。
测试
Qt控制台测试程序:
9. 在Qt中运行测试例程时出现下面的错误
别人的回答:
找了半天也没发现在哪里添加opencv_imgcodecs。实在解决不了了,感觉好坑啊。
最后发现就在上面的工程名称.Pro中加上下面的库路径在编译就可以了。
LIBS+=D:\SoftwarePlace\OpeCV4Qt\bin\libopencv_*.dll
所以感觉在前面出问题也是因为这;
最后的正确例程:工程名称.Pro内容如下:
INCLUDEPATH += D:\SoftwarePlace\OpeCV4Qt\include\
D:\SoftwarePlace\OpenCV4Qt\include\opencv\
D:\SoftwarePlace\OpenCV4Qt\include\opencv2\
LIBS+=D:\SoftwarePlace\OpenCV4Qt\lib\libopencv_*.a
LIBS+=D:\SoftwarePlace\OpeCV4Qt\bin\libopencv_*.dll
程序例程还是上面那个。
10. 关于Qt的动态库
环境变量配置好后,在Qt中用Ctrl+R可以成功运行程序,但是直接双击程序运行却会提示缺少libopencv_highgui249.dll,libopencv_core249.dll这是因为缺少Qt的动态库。
解决方法
-
手动添加
发布软件时把动态库libopencv_highgui249.dll,libopencv_core249.dll手动添加到工程目录 -
打包动态库
Qt 官方开发环境里自带了一个工具:windeployqt.exe。
win+r 然后输入 cmd 打开命令提示行,切换到编译完的软件目录下,假设软件名叫 abc.exe,在命令行里输入 windeployqt abc.exe,就会把需要的动态库都复制到该软件目录下。
完结撒花。