Qt5.9.1+cmake3.15.0+opencv4.1.1

本文大部分内容转自:https://blog.csdn.net/z634863434/article/details/89950961

准备工作
1.Qt5 (Qt官网下载https://www.qt.io/)
2.cmake(cmake官网下载 https://cmake.org/download/)
3.OpenCV(OpenCV官网下载https://opencv.org/)

原文采用的是Qt5.11 (编译器以MinGW为例)
cmake3.14.3
OpenCV3.4.6

(由于自己采用的是Qt5.9.1+cmake3.15.0+opencv4.1.1跟原文不一样,所以有些步骤做了改变,自己是在卸载了python并且在环境变量中删除了Git相关的环境后进行安装的,跟原文不同之处可以参考原文:https://blog.csdn.net/z634863434/article/details/89950961)

确认Qt编译器
首先确认Qt的编译器,目前Qt官网上下载的Qt,在安装时自带的是MinGW编译器,但也可以选择VS等其他编译器。
如果不知道自己Qt编译器的话,可以打开Qt5编译环境,创建项目时会显示当前的编译器,如下图。
                         

以上图为例,这边有两个编译器,一个是32位MinGW,另一个是64Bit MSVC2017(这个编译器需要配置,如果在安装Qt前已经安装过VS2017或者该编译器,在Qt安装时候会自动配置)。

这边选择项目后续所需要用到的编译器(这边以MinGW为例),生成一个普通的Qt项目。
点击Qt IDE工具栏“工具”,再点击“选项”,进入Kit套件管理页面,查看MinGW C/C++的编译器位置。
                                    

由上图可知
MinGW的C++的编译器为C:\Qt\Tools\mingw530_32\bin\g++.exe
MinGW的C的编译器为C:\Qt\Tools\mingw530_32\bin\gcc.exe

配置cmake
cmake解压之后在\cmake\cmake-3.14.3-win64-x64\bin会有一个带图形界面的软件cmake-gui.exe,打开以后如下图所示:
                       

where is the source code中填入OpenCV的源码路径(自己的路径是D:/opencv-4.1.1-vc14_vc15/opencv/sources)
where to build the binaries中填入编译后生成文件的存放位置(可自己新建一个文件夹,我自己在Qt下新建了一个OPENCV;选的路径是D:/Qt_location/OPENCV)
Advanced勾选
                                      在这里插入图片描述

点击下方的Configure按钮,会弹出配置框

Specify the generator for this project下拉框中选择MinGW Makefiles,然后圈选Specify native comilers,点击Next

                                                 

之后会让选择MinGW的C/C++编译器位置,填入对应编译器位置(具体怎么找路径看”确认Qt编译器“章节),Fortran不用填写,配置完后点击Finsh,进行配置验证。

                                                                     

第一次配置Cmake时候,会失败跳出Error in configuration process,project files may be invalid错误。
这个时候在Cmake列表控件中,找到CMAKE_MAKE_PROGRAM这一项(没有找到这一项的话,请确认Advanced是否勾选),修改其Value的路径值。由于使用了MinGW编译器,因此路径值应该为C:/Qt/Tools/mingw530_32/bin/mingw32-make.exe(make文件应该和编译器在用一个目录下)

                    

配置完成后,再一次点击Configure文件,
如果报故“由于找不到libwinpthread-1.dll,无法继续执行代码”,可以添加环境变量或者将C:\Qt\Tools\mingw530_32\bin下的libwinpthread-1.dll复制到
32位系统放入:C:\Windows\System32
64位系统放入:C:\Windows\SysWOW64

此时,配置通过,但需要将勾选WITH_OPENGL、WITH_QT、ENABLE_CXX11三项。并将WITH_OPENCL_D3D11_NV、WITH_IPP、ENABLE_PRECOMPILED_HEADERS勾选状态去除。

在Qt5Concurrent_DIR,Qt5Core_DIR,Qt5Gui_DIR,Qt5Test_DIR,Qt5Widgets_DIR,Qt5OpenGL_DIR,它们的Value分别填写为:

(如果原本就是跟下边相同就不用改)

C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5Concurrent
C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5Core
C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5Gui
C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5Test
C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5Widgets
C:/Qt/5.11.1/mingw53_32/lib/cmake/Qt5OpenGL
再次configure。

                   

如果出现Found unsuitable Qt version “” from NOTFOUND, this code requires Qt 4.x问题
需要将http://svn.osgeo.org/ossim/trunk/ossim_package_support/cmake/CMakeModules/FindQt5.cmake文件内容复制到findqt4.cmake,替换原有文件(可以先执行此操作再configure。(文件路径E:\cmake\cmake-3.14.3-win64-x64\share\cmake-3.14\Modules)

在cmake日志框出现Configuring done之后点击 Generate按钮,稍等后显示Generating done,完成生成工作。

MinGW编译
可以将C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe复制到cmake生成的OpenGL文件夹下,通过CMD到生成的OpenGL文件夹路径下运行mingw32-make.exe可自动执行编译(或者将C:\Qt\Tools\mingw530_32\bin添加进环境变量中)。
编译时候遇到如下问题:
1.cap_dshow.cpp文件出错,显示sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA没有定义
解决方法:打开opencv-3.4.6\modules\videoio\src\cap_dshow.cpp文件,在最前面(注释后有效代码第一行)加上宏定义

#define STRSAFE_NO_DEPRECATE

编译完成后,在输入mingw32-make install(不输也行),等待安装完成。
遇到其余问题可以参考一下:https://blog.csdn.net/Lin_Mengxuan/article/details/89482306

 

配置opencv(这部分是用自己安装过程中的路径为例,与上边的路径不太一样)

将opencv (解压后的)中的include文件夹, opencv 编译后的文件夹中的bin文件夹和lib文件夹  ,将这三个文件夹复制出来,放在一个自定义的文件夹(D:\Qt_location\5.9.1\openbuild)中,并将D:\Qt_location\5.9.1\openbuild\bin添加到系统的环境变量中。

在建好的项目中的.pro文件中添加下边的路径:

INCLUDEPATH+=D:\Qt_location\5.9.1\openbuild\include\opencv2
INCLUDEPATH+=D:\Qt_location\5.9.1\openbuild\include
LIBS+=D:\Qt_location\5.9.1\openbuild\lib\libopencv_*.a

下边是测试用的例子:

#include"opencv2/opencv.hpp"
#include"opencv2/core/core.hpp"
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include <QApplication>
#include <QWidget>
#include <QString>
#include <QDebug>
#include <QString>
#include <QFile>

using namespace cv;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Mat img;
    img = imread("jing.jpg");//加载并图片,延时2后自动关闭窗口,如果用绝对路径,请用/不要用\
    imshow("Image", img);
     waitKey(2000);
    //destroyAllWindows();

   return a.exec();
}

注意测试过程中要将项目->shadow build 勾选去掉,不然放在当前路径下的图片运行程序过程中找不到(原因似乎是如果勾选了就会创建另外一个路径,而

创建的路径文件里没有图片)

                               

 

附:安装Qt5.9.1时选择的组件。

                         

自己装了vs2015,所以选择了msvc2015.

 

参考的其他文章:https://blog.csdn.net/t980832453/article/details/79396972

                         : https://blog.csdn.net/huihut/article/details/81317102

 

 

方法二:直接用别人mingw编译好的文件

参考:https://blog.csdn.net/qq_33474442/article/details/87074218

 

 

 

 

 

 

 

                               

 

posted @ 2019-07-31 10:29  AI_ON  阅读(1008)  评论(0)    收藏  举报