OpenCV简明教程(MinGW 5.3.0+QT 5.9.1)

来源:互联网 发布:开源游戏源码 编辑:程序博客网 时间:2024/06/10 22:03

OpenCV简明教程(Win7+MinGW 5.3.0+QT 5.9.1)

贺志国

2017年10月29日

 

一、  使用CMake和Mingw5.3编译OpenCV

1.  Mingw5.3为Qt5.9.1自带的编译器,首先需要安装Qt5.9.1,我将Qt5.9.1安装在D盘,则Mingw5.3的安装位置为:“D:\Qt\Qt5.9.1\Tools\mingw530_32\bin\g++.exe”。需要将“D:\Qt\Qt5.9.1\Tools\mingw530_32\bin”和“D:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin”添加到环境变量“Path”中,注意使用分号分隔多个变量。

2.  将源代码“opencv-3.3.0.zip”解压到当前文件夹,形成“opencv-3.3.0”文件夹。为了便于编译分类管理,将解压后的文件夹“opencv-3.3.0”重新命名为:“opencv-src-3.3.0”。注意:不要将OpenCV解压到中文路径下,否则CMake会生成一系列带“??”路径的配置文件,使得编译器无法正确识别相关文件,致使编译失败

3.  在当前文件夹下建立一个与“opencv-src-3.3.0”并列的文件夹“opencv-build-3.3.0”,用于存放与编译相关的文件。

4.  在“开始”菜单中打开“CMake(cmake-gui)”程序,分别选择“where is the source code”和“where to buildthe binaries”两个文件夹为:“F:/Code/OpenCV/opencv-src-3.3.0”和“F:/Code/OpenCV/opencv-build-3.3.0”(如下图所示)。注意:CMake是基于Unix/Linux系统开发的编译工具,它使用正斜杠“/”作为路径分隔符,而Windows使用反斜杠“\”作为路径分隔符。为了让CMake正确识别路径,我们应当使用正斜杠“/”作为路径分隔符。

5.  点击“Configure”按钮,选择编译器为“MinGWMakefiles”,点击“Finish”按钮。

6.  如果CMake未找到合适的编译器,则 将“CMAKE_MAKE_PROGRAM”设置为:“D:/Qt/Qt5.9.1/Tools/mingw530_32/bin/mingw32-make.exe”(如下图所示),点击“Configure”按钮:

7.  此后CMake会根据当前编译器,列出可编辑的配置选项,可根据需要进行个性化设置。将“WITH_QT”、“WITH_OPENGL”、“WITH_OPENMP”(用于并行计算)选中,将“ENABLE_PRECOMPILED_HEADERS”取消选中(即“使用预编译头”选项,默认是选中状态;该选项是为VC准备的,QT使用会报错,错误提示如下:Building RC objectmodules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj D:\Qt\Qt5.9.1\Tools\mingw530_32\bin\windres.exe:unknown option – W …),将BUILD_opencv_python3或BUILD_opencv_python2选项取消选中(我机器上安装了Anaconda 3.5,对应的是Python3,不知是Anaconda的问题还是OpenCV的问题,选中该选项后,编译会成功,但链接会报一堆未定义错误:CMakeFiles\opencv_python3.dir/objects.a(cv2.cpp.obj):cv2.cpp:(.text$_ZL26pyopencv_cv_getGaborKernelP7_objectS0_S0_+0x181):undefined reference to `_imp___Py_NoneStruct'…),其余全部保持不变,再次点击“Configure”按钮进行配置,直到没有红色选项框且出现“Configuring done”的提示。

8.  点击“Generate”按钮,编译OpenCV代码,直到出现“Generating done”提示,表示MinGW5.3的MakeFile顺利生成。

9. 点击“开始”->“所有程序”->“Qt 5.9.1”->“5.9.1”->“MinGW 5.3.0 (32-bit)”->“Qt 5.9.1 for Desktop (MinGW 5.3.0 32bit)”,在打开的命令行窗口中输入如下命令。

cd/D F:\Code\OpenCV\opencv-build-3.3.0

mingw32-make-j2  # -j2表示开启两个编译线程,如果机器为8核,则可以写为-j8


注意:如果在编译时出现类似如下错误:

F:\Code\OpenCV\opencv-src-3.3.0\modules\videoio\src\cap_dshow.cpp:2302:10:error : 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was notdeclared in

thisscope

     else sprintf(tmpStr, "%u",prop);

       …

[ 60%]Built target opencv_dnn

Makefile:161:recipe for target 'all' failed

mingw32-make:*** [all] Error 2

则修改文件“F:\Code\OpenCV\opencv-src-3.3.0\modules\videoio\src\cap_dshow.cpp”,在该文件第110、111行之间添加如下语句(红色加粗行):

//Include Directshow stuff here so we don't worry about needingall the h files.

#define NO_DSHOW_STRSAFE     //  for mingw 5.3.0

#include  "DShow.h"

 

编译完成后,执行如下安装命令,会将编译后生成的头文件及动态库文件复制到目录:“F:\Code\OpenCV\opencv-build-3.3.0\install”。

mingw32-make install

10. 添加环境变量:OPENCV_DIR,并指定其值为“install”文件夹所在的路径:“F:\Code\OpenCV\opencv-build-3.3.0\install\”;将%OPENCV_DIR%\x86\mingw\bin添加到系统的PATH变量中.

二、  使用Qt Creator4.3.1(Qt5.9.1自带)构建OpenCV工程

1.  打开Qt Creator4.3.1,按快捷键“Ctrl+N”新建一个“Qt WidgetsApplication”项目,选择创建路径为“H:\code\OpenCV”,项目名为“OPenCVWithQT,然后一路Next到向导完成。

2. 点击左侧工具栏上的“项目”按钮,进入项目属性设置模式,将其中的“Shadow build”项取消选中。

3. 点击左侧工具栏上的“编辑”按钮,进入文档编辑模式,打开“OPenCVWithQT.pro”文件,在第25行处,添加如下代码

INCLUDEPATH+=$$(OPENCV_DIR)/include

LIBS+=-L$$(OPENCV_DIR)/x86/mingw/bin\

       -lopencv_core330       \

       -lopencv_highgui330    \

       -lopencv_imgcodecs330  \

       -lopencv_imgproc330    \

       -lopencv_features2d330 \

       -lopencv_calib3d330

4. 在编辑模式下,修改“main.cpp”内容如下:

#include "mainwindow.h"
#include <QApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
 
int main(int argc, char* argv[])
{
    QApplication a(argc,argv);
    //MainWindow w;
    //w.show();
 
    //read an image
    cv::Matimage = cv::imread("e://1.jpg", 1);  
    cv::namedWindow("MyImage");  
    cv::imshow("MyImage", image);
 
    return a.exec();
}

 

5. 随便复制一幅JPG图像到E盘根目录,并将其改名为:“1.jpg”(因为代码中读取的图像就是:e://1.jpg),注意:图像路径一定要设置正确,否则程序会抛出异常终止。按“F5”键生成工程并调试运行。