最近在做一个项目,项目涉及到一些图像处理方面的要求,在前期经过调研发现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。
最终在本人的计算机上文件目录情况如下:
有关环境配置:
编译源码
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项目,同时指定本地编译器的位置,出现如下界面:
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
最终界面如下图所示:
点击“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,配置后的界面如下:
6、按照步骤5,作如下设置:
勾选WITH_OPENGL
勾选WITH_QT
不勾选WITH_IPP
不勾选ENABLE_PRECOMPILED_HEADERS
不勾选 WITH_OPENCL_D3D11_NV
7、再次点击“Config”,如果不报错就点击“Generate”,成功后的界面如下:
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目录下的情况:
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()"<
程序运行成功,可以看到两个窗口,至此过程结束。