为了把代码往arm-linux移植,准备先用qt来重新编译代码。结果用了整整一天半的时间,终于配置成功了。
其中的过程是一步一个坎,极为坎坷,看博客看得要吐,部分环节投机取巧,所幸最后配置成功。
现在就把这一天半以来的配置历程总结一下,也为大家提供借鉴。第一次此写技术博文,多有不足之处,望大家指出改正。
第一步:下载并安装opencv2.4.11,Qt5.8.0,CMake(https://cmake.org/)。Qt要下载mingw版本。
注意:安装时要看好路径,为了小心起见,所有的程序都安装在路径名称上没有汉字、空格、或特殊符号的文件夹中。
第二步:配置qt的环境变量。
在path变量下添加
qmake和cmake的路径:
。
添加qt变量
。
注意:这里推荐一款小软件,可以很方便直观的实现添加变量和路径:www.rapidee.com 。
第三步:利用CMake配置Opencv(关键步骤)
现在下载的CMake都是免安装版,解压以后就是一个文件夹。在文件夹里的bin文件下,找到cmake-gui 打开。
会出现以下界面,在source code 里添加opencv2.4.11目录下的sources文件,在build the binaries 里选择一个新建的文件夹即可。注意全要用英文。
点击configure,在下拉菜单里选择MinGW Makefiles,按finish开始编译。
网上很多的人直接在这里编译之后就得到了预期的结果,但我在这一步遇到了很大的问题。
解决办法为: 将NOTFOUND 改为cmake -D"CMAKE_MAKE_PROGRAM:PATH=D:\QtMing5.8.0\Tools\mingw530_32\bin\mingw32-make,即可继续进行编译。
后来发现,这个问题主要是因为Qt环境变量路径的配置有问题。
若一切顺利,应该获得如下结果:
点击with,勾选 openGL和Qt,点击configure,若有红色选框,就再configure一次,得到以下结果:
最后,点击generate,等到
generating done之后,出现以下界面:
至此,Cmake-gui的工作完成。
注意:在生成makefile文件的时候,可能会出现“Found unsuitable Qt version “” from NOTFOUND, this code requires Qt 4.x”的问题。
发现在
cmake/share/cmake-32-modules/目录下只存在findqt4.cmake,不存在
findqt5.cmake。解决方法为在
http://svn.osgeo.org/ossim/trunk/ossim_package_support/cmake/CMakeModules/FindQt5.cmake复制findqt5.cmake内容,
用notepad打开findqt4.cmake,用qt5的的内容替换qt4的内容,保存后即可使用。
第四步:配置生成opencv二进制文件。
打开刚才自定义的文件夹,按住shift键右击,选择“在此处打开命令窗口”。敲入
mingw32-make命令运行。此运行过程比较长,可能会持续半个小时以上。
待达到100%时生成结束,敲入mingw32-make install命令,将生成的opencv二进制文件存到install文件夹内。最终,可以在文件根目录\install\x64\mingw看到lib与
bin两个文件夹。 将两个文件夹复制。
在opencv安装目录下找到build\include文件并将其复制。
把这三个文件夹同时粘贴到一个新文件夹中,
注意,此文件夹路径不允许有汉字,空格,以及各种符号。
在path环境变量下配置bin文件夹的路径。
至此,有关opencv2.4.11的qt开发环境配置工作结束。
注意:此处有可能会出现一个问题,我遇到了此文件夹下根本就不存在mingw32-make.exe的情况。此问题的解决方案十分暴力,到Qt根目录下的tool文件
夹里吧mingw32-make.exe直接复制粘贴过来,再次运行mingw32-make命令,即可实现同样的功能。
第五步:验证配置效果
新建qt工程,在.pro文件中添加以下代码:
INCLUDEPATH+=D:\opencvcm\include\opencv\
D:\opencvcm\include\opencv2\
D:\opencvcm\include\
LIBS+=D:\opencvcm\lib\libopencv_calib3d2411.dll.a\
D:\opencvcm\lib\libopencv_contrib2411.dll.a\
D:\opencvcm\lib\libopencv_core2411.dll.a\
D:\opencvcm\lib\libopencv_features2d2411.dll.a\
D:\opencvcm\lib\libopencv_flann2411.dll.a\
D:\opencvcm\lib\libopencv_gpu2411.dll.a\
D:\opencvcm\lib\libopencv_highgui2411.dll.a\
D:\opencvcm\lib\libopencv_imgproc2411.dll.a\
D:\opencvcm\lib\libopencv_legacy2411.dll.a\
D:\opencvcm\lib\libopencv_ml2411.dll.a\
D:\opencvcm\lib\libopencv_objdetect2411.dll.a\
D:\opencvcm\lib\libopencv_video2411.dll.a\
D:\opencvcm\lib\libopencv_nonfree2411.dll.a\
D:\opencvcm\lib\libopencv_ocl2411.dll.a\
D:\opencvcm\lib\libopencv_photo2411.dll.a\
D:\opencvcm\lib\libopencv_stitching2411.dll.a\
D:\opencvcm\lib\libopencv_superres2411.dll.a\
D:\opencvcm\lib\libopencv_videostab2411.dll.a\
在cpp文件中敲入测试代码:
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("1.jpg",1);
imshow("src",src);
waitKey(0);
return 0;
}
运行代码,若能显示图片则证明配置成功。
注意:在qt的IDE中,要把实验图片存放在build-again-Desktop_Qt_5_8_0_MinGW_32bit-Debug文件夹下,不要存放在.cpp文件所位置。否则opencv会报错,找不到目标图片。
《Opencv图像处理》葛罗瑞亚·布埃诺·加西亚、奥斯卡·德尼茨·苏亚雷斯等著。
《OPencv3编程入门》毛星云等编著。