Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程

最近在做一个项目,项目涉及到一些图像处理方面的要求,在前期经过调研发现OpenCV在这方面还不错,所以确定实际操作一番。

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。如果你不了解 C/C++,请阅读《C语言教程》和《C++教程》。OpenCV 是跨平台的,可以在  Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。

考虑到一些跨平台的应用,所以之前开发项目时用过Qt作为开发工具,当前使用的是Qt5.9.7。在Qt5.9.7中使用的MinGW5.3 X86版本。网上有很多介绍如何在Windows平台上利用CMake编译64版本的,但是没有关于X86下编辑的介绍。所以决定自己编译一版。

准备工作

操作系统:Windows7以上版本。

QT:Qt5.9.7,可以从http://download.qt.io/archive/qt/5.9/5.9.7/,

文件名为qt-opensource-windows-x86-5.9.7.exe。

CMake:cmake-3.15.0,官网地址是:https://cmake.org/。

下载地址:https://github.com/Kitware/CMake/releases/download/v3.15.0/cmake-3.15.0-win32-x86.zip

OpenCV:OpenCV4.1.0.rar,

可以从https://github.com/opencv/opencv/archive/4.1.0.zip下载。

 

软件配置

1、安装Qt5.9.7,注意在选择安装部件时选中WinGW组件,这样就可以无需安装Visual Studio组件就可以进行Qt开发了。Qt安装后的根目录为:C:\Qt\Qt5.9.7。

2、将CMake解压,此处解压到C盘根目录,CMake根目录为:C:\cmake-3.15.0-win32-x86。

3、将OpenCV源码解压,解压后的根目录为:C:\opencv-4.1.0。

4、配置Qt有关的配镜,在Path环境变量中添加两个与QT有关的目录,即C:\Qt\Qt5.9.7\5.9.7\mingw53_32\bin和C:\Qt\Qt5.9.7\Tools\mingw530_32\bin。

5、配置与CMake有关的环境变量,在Path环境变量中添加:C:\cmake-3.15.0-rc4-win32-x86\bin。

最终在本人的计算机上文件目录情况如下:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第1张图片

有关环境配置:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第2张图片

编译源码

1、运行C:\cmake-3.15.0-rc4-win32-x86\bin下的cmake-gui.exe,分别设置源代码路径和编译后的代码路径,分别为:

Where is the source code:   C:\opencv-4.1.0

Where to build the binaries: C:\OpenCV4.1_build

2、点击“Configure”,选择生成MinGW项目,同时指定本地编译器的位置,出现如下界面:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第3张图片

3、指定C和C++编译器的位置(Fortran没用上,无需配置),MinGW中C及C++编译的位置分别为:

C编译器位置:C:/Qt/Qt5.9.7/Tools/mingw530_32/bin/gcc.exe

C++编译器位置:C:/Qt/Qt5.9.7/Tools/mingw530_32/bin/g++.exe

最终界面如下图所示:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第4张图片

点击“Finish”后会自动验证配置。

4、在验证配置过程中会出现一些错误提示,根据提示修改错误提示。在我这里报错:

CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool

这是因为没有找到MinGW-make的信息,在界面上勾选“Grouped”和“Advanced”选项,然后在“Search”后的文本框中搜索CMAKE_MAKE_PROGRAM,点击该项,将其修改为mingw32-make.exe所在的位置,在本人电脑中它的位置为C:/Qt/Qt5.9.7/Tools/mingw530_32/bin/mingw32-make.exe,配置后的界面如下:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第5张图片

6、按照步骤5,作如下设置:

勾选WITH_OPENGL

勾选WITH_QT

不勾选WITH_IPP

不勾选ENABLE_PRECOMPILED_HEADERS

不勾选 WITH_OPENCL_D3D11_NV

7、再次点击“Config”,如果不报错就点击“Generate”,成功后的界面如下:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第6张图片

8、至此,CMake的作用已发挥完毕,可以使用MinGW来进行编译了,打开命令行并进入OpenCV4.1.0的源代码根目录,运行命令:

mingw32-make.exe

9、还是在命令行环境中、步骤OpenCV4.1.0的源代码根目录下执行命令:

mingw32-make.exe install

10、直接完成了OpenCV4.1.0的编译

代码测试

1、利用Qt Creator创建项目,项目名为OilLeakDetector,项目根目录为:

D:\QtCreatorProjects\OilLeakDetector

2、在项目根目录下创建OpenCV目录,即D:\QtCreatorProjects\OilLeakDetector\OpenCV,执行以下操作:

将C:\OpenCV4.1_build\install\include目录拷贝到刚才创建的OpenCV目录;

将C:\OpenCV4.1_build\bin目录拷贝到刚才创建的OpenCV目录;

将C:\OpenCV4.1_build\lib目录拷贝到刚才创建的OpenCV目录;

至此D:\QtCreatorProjects\OilLeakDetector\OpenCV目录下的情况:

Qt5.9.7中使用MinGW32编译OpenCV4.1.0过程_第7张图片

3.打开OilLeakDetector项目的OilLeakDetector.pro,这个文件的路径为:

D:\QtCreatorProjects\OilLeakDetector\OilLeakDetector.pro

 

增加头文件目录,在OilLeakDetector.pro文件中添加如下代码:

INCLUDEPATH += $$PWD/OpenCV/include \

               $$PWD/OpenCV/include/opencv2

 

增加库文件目录,在OilLeakDetector.pro文件中添加如下代码:

LIBS += -L$$PWD/OpenCV/bin -llibopencv_highgui410 \

        -L$$PWD/OpenCV/bin -llibopencv_core410 \

        -L$$PWD/OpenCV/bin -llibopencv_imgproc410 \

        -L$$PWD/OpenCV/bin -llibopencv_imgcodecs410 \

        -L$$PWD/OpenCV/bin -llibopencv_videoio410 \

        -L$$PWD/OpenCV/bin -llibopencv_core410

注意,引用库的时候不需要写文件后缀,这个Qt会自动处理。

 

4、对main.cpp添加必要的引用,然后编写OpenCV调用代码,最终代码如下:

#include "MainWindow.h"

#include 

#include 

#include 



#include 

#include 

#include 



using namespace cv;



int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

         //可以将此处的图片路径更换为实际的文件路径

    Mat srcImage=imread("E:\\Photo\\laipule\\20180912180306.jpg");

    qDebug()<<"elemSize()"<

程序运行成功,可以看到两个窗口,至此过程结束。

你可能感兴趣的:(工具及系统)