OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建

之前有过对OpenCV3.4.2+VS2015编译及环境搭建,今天使用OpenCV3.4.3+QtCreator5.9.4编译及环境搭建。编译过程比较曲折,大部分编译错误都可以查得到解决方法,也遇到了Google无果的错误,好在最后还是解决了,特此记录。

编译环境

  • win10-64bit
  • Qt5.9.4
  • MinGW-5.3.0-32bit
  • CMake-3.12.1
  • OpenCV-3.4.3

相关软件下载地址

Qt下载地址:http://download.qt.io/archive/qt/5.9/
CMake下载地址:https://cmake.org/download/
OpenCV下载地址:https://opencv.org/releases.html#

此处下载安装包(Win pack)和源码(Sources)均可,配置时选择的目录不同。

其它地址

OpenCV官网:https://opencv.org/
OpenCV官方教程:https://docs.opencv.org/3.4/d9/df8/tutorial_root.html
速查表:https://docs.opencv.org/3.0-last-rst/opencv_cheatsheet.pdf


添加环境变量

  • H:\cmake\bin
  • D:\Qt\Qt5.9.4\5.9.4\mingw53_32\bin
  • D:\Qt\Qt5.9.4\Tools\mingw530_32\bin

OpenCV编译步骤

在opencv安装的同级目录下创建文件夹buildOpencv,用来存放构建文件及生成的库。

Qt官方编译步骤文档:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

编译前配置

1、打开 cmake-gui,设置源码和生成路径:

  • Where is the source code :H:\opencv3.4.3\opencv\sources (opencv安装目录)
  • Where to build the binaries:H:\opencv3.4.3\buildOpencv (新建的文件目录)

然后点击Configure,在弹框里选择编译器,点击Next,如下图:

如果下载的是opencv源码而非安装包,解压后里面没有sources目录,上图第一项设置Where is the source code :H:\opencv3\opencv-3.4.3即可。

2、在弹窗里设置编译器目录,然后点击Finish:

D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\gcc.exe
D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\g++.exe

3、点击Finish之后需要等待一段时间,等到进度条读完之后,开始配置:

勾选 WITH_QT
勾选 WITH_OPENGL(默认已勾选)

勾选之后点击Configure,等到进度条读完之后,再次配置:

  • Qt5Concurrent_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Concurrent
  • Qt5Core_DIR           --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Core
  • Qt5Gui_DIR             --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Gui
  • Qt5Test_DIR            --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Test
  • Qt5Widgets_DIR      --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Widgets
  • Qt5OpenGL_DIR     --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5OpenGL

CMAKE_BUILD_TYPE --> ***Release***(设置为Release后编译完成只会生成release库,需要debug库的话等到编译完成将此处更改为Debug,重新执行下面的步骤则会在生成的release库的目录下生成debug库)
点击右上角的Add Entry,然后在弹窗中输入:

  • QT_MAKE_EXECUTABLE
  • FILEPATH
  • D:\Qt\Qt5.9.4\5.9.4\mingw53_32\bin\qmake.exe

然后点击OK- Generate ,进度条读完之后,配置完成。

更多配置提示

上一步已经配置完成,但是编译过程中会遇到编译错误,如果希望一次编译成功,可以进行下面的设置。或者直接在上一步Generate之后就进行编译,等到编译出现错误时再来配置。

  • 不勾选 WITH_IPP
  • 不勾选与TESTS有关的选项
  • 不勾选 ENABLE_PRECOMPILED_HEADERS
  • 不勾选WITH_MSMF
  • 勾选 ENABLE_CXX11
  • 编辑H:\opencv3.4.3\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在约110行左右#include "DShow.h"上面添加#define NO_DSHOW_STRSAFE,#define STRSAFE_NO_DEPRECATE,如下图:

编译命令

在构建目录buildOpencv下按shift+右键,打开终端,然后执行编译命令:

mingw32-make 或 mingw32-make -j 8

注意:右侧带参数的命令是多线程编译,编译速度会快很多,但是使用多线程编译前最好先重启电脑或者关闭不必要的软件保证内存和CPU的占用较低状态,否则很有可能编译失败,编译失败的话也没关系可以改为单线程继续编译。

mingw32-make install

编译完成(100%)之后执行安装命令,会在相关目录下生成库文件。

编译错误

编译过程中可能会遇到下面的错误:

  1. 多线程编译错误,18%左右

解决:改为使用mingw32-make命令继续编译

  1. C++11错误,25%左右

解决:打开 cmake-gui ,勾选 ENABLE_CXX11,然后重新Configure-Generate-mingw32-make

  1. cap_dshow.cpp文件出错,43%左右

解决:
编辑H:\opencv3.4.3\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在约110行左右#include "DShow.h"上面添加#define NO_DSHOW_STRSAFE,然后重新Configure-Generate-mingw32-make。编译debug版本出现该错误时在cap_dshow.cpp文件中添加#define STRSAFE_NO_DEPRECATE

  1. cap_msmf.cpp文件出错,43%左右

解决:打开 cmake-gui ,不勾选WITH_MSMF,然后重新Configure-Generate-mingw32-make

生成的OpenCV库

编译完成后,生成的库在H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin目录下

Qt+OpenCV测试

添加OpenCV库到环境变量

添加 H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin到系统环境变量(Path)中

测试代码

在.pro文件中添加头文件路径和库路径:

  1. INCLUDEPATH += H:\opencv3.4.3\buildOpencv\install\include

  2. LIBS += H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_core343.dll \

  3.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_highgui343.dll \

  4.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgcodecs343.dll \

  5.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgproc343.dll \

  6.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_features2d343.dll \

  7.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_calib3d343.dll

mainwindow.cpp:

  1. #include "mainwindow.h"

  2. #include "ui_mainwindow.h"

  3. #include <opencv2/core/core.hpp>

  4. #include <opencv2/highgui/highgui.hpp>

  5. MainWindow::MainWindow(QWidget *parent) :

  6.     QMainWindow(parent),

  7.     ui(new Ui::MainWindow)

  8. {

  9.     ui->setupUi(this);

  10.     // read an image,Mat是基础图像容器

  11.     cv::Mat image = cv::imread("H:/test_rec/qt.jpg", 1);

  12.     // create image window named "My Image"

  13.     cv::namedWindow("My Image");

  14.     // show the image on window

  15.     cv::imshow("My Image", image);

  16. }

  17. MainWindow::~MainWindow()

  18. {

  19.     delete ui;

  20. }

注意:如果构建项目时使用影子构建(即构建目录与项目目录非同一目录),则需要将.pro里引入的库拷贝到可执行文件所在目录,否则运行程序会异常结束(因为找不到库),如果没有使用影子构建则可以直接运行。

运行结果

Qt + OpenCV + Qt Creator环境配置

软件版本:

系统:win7 64位

opencv:2.4.9

QT:5.10.1

QT creator:4.5.1

MinGW:5.3.0

CMake:3.11.1

第一步:安装QT

首先,在QT官网下载QT,5版本的QT安装包包含了MinGW、Qt Creator,直接下载安装就行。需要注意的是在安装过程中,QT有多个组件可选,例如MSVC版、安卓、ARM等,因为我只需做PC端的机器视觉开发,同时考虑到和Linux上的兼容性,只选择MinGW,Tools的话只选择了Qt Creator,具体如下图:

     

安装完成后将qt和mingw文件夹下bin文件夹路径添加进PATH变量。

第二步:安装CMake

安装很简单,不多说。注意勾选添加进path变量

第三步:安装opencv

第四步:利用MinGW GUI编译opencv源码,注意选WITH_QT,WITH_OPENGL,配置后对红色部分做修改:

找到QT_QMAKE_EXECUTABLE,它的值填写为:C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/qmake.exe

找到QT_MKSPECS_DIR,它的值填写为:C:/Qt/Qt5.3.1/5.3/mingw482_32/mkspecs

找到QT_QTCORE_LIBRARY_DEBUG,它的值填写为:C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/Qt5Cored.dll

找到QT_QTCORE_LIBRARY_RELEASE,它的值填写为C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/Qt5Core.dll

找到QT_QTCORE_INCLUDE_DIR,它的值填写为C:/Qt/Qt5.3.1/5.3/mingw482_32/include/QtCore/5.3.1/QtCore

第五步:打开CMD,执行mingw32-make,然后执行mingw32-make install

最后:配置pro文件:

INCLUDEPATH += D:\opencv_mingw530\install\include
LIBS += -L D:\opencv_mingw530\install\x86\mingw\bin\libopencv_*.dll //(动态链接库)
LIBS += -L D:\opencv_mingw\install\x86\mingw\lib\libopencv_*.a      //(静态链接库)

实例代码:

#include <opencv2/opencv.hpp>
using namespace cv;
int main(void)
{
    VideoCapture capture(0);
    while(1)
    {
        Mat frame;
        capture >> frame;
        imshow("video", frame);
        waitKey(30);
    }
    return 0;
}

QT5.8+OpenCV3.2的安装与配置

QT5.8+OpenCV3.2的安装与配置(win7_X64+Qt_5.8.0+opencv_3.2.0)

一、安装QT 5.8.0

安装在: C:\Qt\Qt5.8.0
QT下载地址: http://download.qt-project.org/official_releases/
下载:qt-opensource-windows-x86-mingw530-5.8.0.exe

二、安装opencv

OpenCV官网: http://opencv.org/
下载OpenCV 3.2.0
解压至: E:\opencv3.2\opencv\

三、安装cmake

从CMake下载cmake-3.8.0-win64-x64.msi

安装至: C:\Program Files\CMake

CMake下载地址: http://www.cmake.org/cmake/resources/software.html

安装CMake的的时候,注意安装路径不能有中文和空格, 在安装过程中,勾选为所有用户加入到环境变量()

四、配置环境变量

主要是将C:\Qt\Qt5.8.0\Tools\mingw530_32\bin 添加到系统环境变量中。
1.生成Makefiles
打开CMake,配置源码路径和生成物的目标路径:
源码路径: E:\opencv3.2\opencv\sources
目标路径: F:\opencv3.2
点击Configure,在弹出的框中选择MinGW Makefiles ,并勾选 Specify native compilers.
接着配置C和C++编译器路径:
C: C:\Qt\Qt5.8.0\Tools\mingw530_32\bin\gcc.exe
C++: C:\Qt\Qt5.8.0\Tools\mingw530_32\bin\g++.exe​
点击finish。这里CMake会自动开始配置。
报错
将value值分别修改为:

C:/Qt/Qt5.8.0/5.8/mingw530_32/bin/qmake.exe

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Concurrent

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Core

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Gui

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Test

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Widgets

然后勾选WITH_OPENGL和WITH_QT

再次报错,将value值继续修改为
C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5OpenGL
继续点击Configure,会有成功的提示。
点击Generate,生成MakeFiles成功。​
2.编译OpenCV
到 E:\opencv3.2\opencv\sources\cmake 下找到 OpenCVCompilerOptions.cmake
它并找到
add_extra_compiler_option(-Werror=non-virtual-dtor)
将它注释掉,变成:

#add_extra_compiler_option(-Werror=non-virtual-dtor)

(以上这一步是为了规避掉我在编译过程中遇到的问题)
返回到:F:\opencv3.2在这个路径下按住键盘的shift键,然后右键鼠标,打开cmd窗口,在命令行输入 mingw32-make
这个过程比较久,大概30分钟,因电脑而异。编译完成。
然后输入 mingw32-make install 进行安装:
大约一分钟后,安装完成。
3.配置环境
A.找到路径 : E:\opencv3.2\opencv\build\include
将include文件夹复制到一个自定义文件夹中
B.CMake目标路径 下的bin文件夹
复制到上面的文件夹
C.CMake目标路径 下的lib文件夹
同上复制
最后自定义文件夹中应该如下示:
然后将文件夹下的bin路径添加到系统环境变量中。
到此QT Creator下的OpenCV开发环境已经配置好,剩下的就是测试是否配置成功。

五、测试

新建一个空的工程 OpenCV_Test.pro
在里面添加:

INCLUDEPATH+=E:\opencvForQT\include
INCLUDEPATH+=E:\opencvForQT\include\opencv
INCLUDEPATH+=E:\opencvForQT\include\opencv2
LIBS += -L E:\opencvForQT\lib\libopencv_*.a

在mainwindow.h里添加:

#include <opencv2/opencv.hpp>
using namespace cv;
//定义全局变量
cv::Mat image;

在mainwindow.cpp中添加button响应函数如下

void MainWindow::on_openImgPushButton_clicked()
{QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files (*.png *.jpg *.bmp)"));qDebug()<<"filenames:"<<fileName;//文件名不能有中文字//String str=fileName.toStdString();image = cv::imread(fileName.toStdString(),1);displayMat(image);//QLabel+QScrollarea显示Mat图像的函数,下一篇博文涉及
}

实现的效果为:

直接在QT creator中使用opencv

工具:

CMake:3.8.2
OpenCV:3.0.0(测试了下3.1.0与3.2.0也可以)
QT:5.8.0
MinGW:5.3.0
系统: WIndows 10

开始

1. OpenCV

下载完解压到某一文件夹:

2.CMake.
选择source文件以及输出的文件路径。这里的source文件就是下载opencv解压后的文件路径,而第二个build路径可以自己选择放在哪个文件夹里。

点击config,选择MinGW Makefiles,再点击Specify native compilers。

选择编译器的路径,保持跟QT的编译器一致就行了。
我的路径为:
E:\installation\QT\Tools\mingw530_32\bin\gcc.exe
E:\installation\QT\Tools\mingw530_32\bin\g++.exe

CMake就会执行配置:

遇到问题请看后面所列情况。
解决后会看到Configuring done。

勾选WITH_OPENGL和WITH_QT,继续config。

还有红色框框,确定路径没错,继续config。

已经没有红色框框了,说明config完成,然后我们点击Generate。

我们可以看到CMake生成的文件:

打开命令行,cd到改目录下,输入mingw32-make进行编译

编译过程如下,这里所用的时间会比较长,耐心等待:

100%之后再输入mingw32-make install。

生成的文件都在install文件夹中:

3.QT Creator
我们把对应的路径(包含文件INCLUDE和库目录LIB)添加到QT工程的pro文件里就可以使用opencv了。

INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\
INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\opencv\
INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\opencv2\
LIBS += G:\opencvTest\opencvTest300\install\x86\mingw\lib\libopencv_*.a


成功运行opencv测试代码。

**

可能遇到的一些问题:

**

  • 由于找不到libwinpthread-1.dll,无法继续执行代码。重新安装程序可能会解决此问题。
    这个是因为环境变量没配,在系统环境变量的PATH中加上QT中mingw对应的目录就行了。 比如我的路径是(忘了是不是只加第一个就可以,不过只加第二个会出错):

    E:\installation\QT\5.8\mingw53_32\bin
    E:\installation\QT\Tools\mingw530_32\bin

  • CMake Error at 3rdparty/ippicv/downloader.cmake:71 (file): file DOWNLOAD HASH mismatch
    我们手动下载对应文件替换掉目录下的文件。
    比如我的ippicv_windows_20141027.zip出问题,则在网上下载一个新的压缩包替换掉原来的压缩包(我电脑上的路径G:\opencvTest\opencv-3.0.0\3rdparty\ippicv\downloads\windows-b59f865d1ba16e8c84124e19d78eec57\ippicv_windows_20141027.zip)。原本3M+网上找了一个25M的替换掉就可以了。

  • CMake was unable to find a build program corresponding toXXX

    在CMAKE_MAKE_PEOGRAM中写上mingw32-make.exe的路径,我的路径是E:/installation/QT/Tools/mingw530_32/bin/mingw32-make.exe

  • 出现问题

modules\python2\CMakeFiles\opencv_python2.dir\build.make:171: recipe
for target
‘modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj’
failed mingw32-make[2]: *
[modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj]
Error 1 CMakeFiles\Makefile2:7721: recipe for target
‘modules/python2/CMakeFiles/opencv_python2.dir/all’ failed
mingw32-make[1]: *
[modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
Makefile:150: recipe for target ‘all’ failed mingw32-make: * [all]
Error 2

解决方法:把CMake中的python选项去掉,有关路径也删掉。重新config和generate.

  • 找不到photo文件
    在CMake中勾选BUILD_opencv_photo重新config、generate、mingw32-make、mingw32-make install。

  • Qt 程序异常结束,并且crashed
    这个问题原因很多。
    这里的原因是没有在环境变量中添加编译完的opencv目录下mingw的bin目录。
    ( 我的路径:G:\opencvTest\opencvTest300\install\x86\mingw\bin)

原因:the windres.exe mingw uses cannot handle/escape “long long” given as a cmdline arg
解决方法:在cmake里面找到OPENCV_ENABLE_ALLOCATOR_STATS或者在search里面搜索,然后把后面的勾选去掉,接着Configure和Generate后,接着在cmd窗口中mingw32-make即可继续编译。

  • 使用cmake来自己编译opencv

  • 一、先下载cmake:

    1. 登录CMake官网,下载CMake安装包。


      2. 双击下载的安装包,安装程序,会弹出如下界面,点击“Next”按钮,进入下一步


      3. 同意CMake的条款,点击“Next”按钮,进入到下一步

    4. 选中“Add CMake to the system PATH for the current user”,点击“Next”按钮。


      5. 修改安装目录。


      6. 点击“Install”,CMake开始安装,安装完成后,点击“Finish”按钮。

    END

    二、使用CMake生成VS2013的OpenCV解决方案

    1. 直接在opencv的官网上下载opencv3.0,然后安装会生成一个opencv3.0的文件。

    2.在OpenCV3.0目录下新建目录build,用于放置生成的解决方案和编译好的库。

    3. 打开CMake,在Where is the source code后面的文本框选择OpenCV的源代码,Where to build the binaries选择第2步新建的文件夹build,如下图所示:

    4. 点击“Configure”按钮,在弹出的对话框中,选择“Visual Studio 12 Win64”,使用默认的本地编译器,如下图所示:(根据自己电脑里面的vs来选)

    5. 点击“Finish”之后,等待配置完成,如下图所示:(如果电脑里面没有下载Cuda,则将勾选的Cuda选项设成否)

    6. 找到WITH_TBB,勾选:(该选项我这次编译时没有选择,不过也没有报错)

    7.再次点击“Configure”按钮,配置完成出现红色标记,修改TBB_INCLUDE_DIRS的Value为:C:\OpenCVLatest\tbb42_20140122oss_win\tbb42_20140122oss\include

    8. 再次点击“Configure”按钮,会出现如下所示:

    9. 这个地方需要注意一下,因为生成的Value值到intel64,这里需要修改为intel64/vc12,对应vs2013,如下图所示:

    10. 再次点击“Configure”按钮,这时就没有红色标记出现了,点击“Generate”按钮,生成OpenCV的解决方案。

    END

    三、VS2013编译OpenCV解决方案生成库

    1.打开OpenCV的解决方案(在文件夹下面选择OpenCV.sln文件),右击CMakeTargets下的INSTALL,选择“生成”,生成Debug版的dll和lib,如下图所示:

    2. 修改配置为“Release”,重复步骤1,生成Release版的dll和lib,如下图所示:

    3. 生成完毕,在OpenCV解决方案下的install文件夹里就有了dll,lib和h头文件了。

    4. 虽然生成了库文件了,如果可以Debug跟踪源码,还得保留OpenCV解决方案。

    在配置vs2013时,本人有遇到一点错误:
    错误 1 error C1083: 无法打开包括文件: “unistd.h”: No such file or directory:
    错误原因:没有继承vs2013中默认的库,可以在属性管理器->链接器->输入->附加依赖项,中勾选从父级或项目默认设置继承

    错误2   找不到Python27-d.lib,
    错误原因:Python中有一个头文件调用了Python调用库的Debug模式;
    http://blog.csdn.net/I_can_do_1098/article/details/54312117 可以参照这个博客,将Pythonconfig.h进行修改;

    最后,自己手动跟踪opencv的代码:
    1.先新建一个项目,再将opencv里面的一个源代码打开

    ,其中里面的配置环境为:


    再进行生成 ,调试成功即可。

    end

  • Win10下Qt+OpenCV+Cmake编译错误记录与解决【gcc: error: long: No such file or directory】

  • 环境:Window10
    Qt版本:5.9.5
    OpenCV版本:4.3.0
    安装完Opencv、Qt和Cmake之后在cmd下通过mingw32-make编译,结果出现错误,错误提示如下:

    [ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/mean.avx2.cpp.obj
    [ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/merge.avx2.cpp.obj
    [ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/split.avx2.cpp.obj
    [ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/sum.avx2.cpp.obj
    [ 40%] Building RC object modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj
    gcc: error: long: No such file or directory
    C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
    mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1492: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
    mingw32-make[2]: *** Waiting for unfinished jobs....
    mingw32-make[1]: *** [CMakeFiles\Makefile2:1844: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
    mingw32-make: *** [Makefile:179: all] Error 2
    

Qt Creator5.12配置OpenCV4.3.0和opencv_contrib扩展包(亲测有效)

本文结构

  • 第一部分 只安装Qt Creator和配置OpenCV
    • 1.Qt Creator5.12.2下载与安装
    • 2.Cmake下载与安装
    • 3.OpenCV下载
    • 4.编译OpenCV
    • 5.测试Qt程序
  • 第二部分 配置opencv_contrib扩展库
    • 6.添加opencv_contrib扩展库
    • 7.测试使用opencv扩展库的Qt程序
    • 8.本文使用的软件百度网盘下载

最终结果展示

笔者使用的版本如下
友情提示:这里Opencv 和opencv_contrib版本需要一致,笔者踩过坑。

Win10 家庭版 64位
Qt Creator 5.12.2
Cmake 3.18.0
Opencv 4.3.0
opencv_contrib 4.3.0

第一部分 只安装Qt Creator和配置OpenCV

1.Qt Creator5.12.2下载与安装

以win10家庭版为例进行下载和安装
官方下载地址http://download.qt.io/archive/qt/5.12/5.12.2/下面有百度网盘安装包,请往下看
选择window版本

安装包有点大3.7G,下载很慢,最终报错,跳转到迅雷下载成功
这里给出笔者百度网盘安装包window版本Qt 5.12.2

双击安装包

这里需要注册qt账户

注册成功后登录

自定义安装路径,要求路径不能含有空格

选择组件

同意协议许可

点击下一步

下一步进行安装

安装完成显示如下

默认是打开Qt界面

2.Cmake下载与安装

官网下载地址https://cmake.org/download/,目前最新的版本是Cmake3.18.0


安装

笔者选择了如下配置:配置全局变量和创建桌面快捷方式

更改安装路径

安装完成

3.OpenCV下载

官方下载地址:https://opencv.org/releases/
目前最新版本是4.3.0
这里选择windows

下载完压缩包名:opencv-4.3.0-vc14_vc15.exe
解压完文件名:opencv

下面是将mingw加入环境变量

系统变量下找到PATH,点击编辑,添加如下

D:\Qt5.12.2\Tools\mingw730_64\bin
  • 1

这是下载Qt时候的路径,需要自己找到

根据知乎:PATH和path是一样的,原因是:Windows系统对大小写不敏感。

4.编译OpenCV

根据安装路径,找到Cmake,点击cmake.gui.exe

where is the source code
添加opencv的sources

D:/opencv/sources
  • 1

新建文件夹opencv-build

where to build the binaries

D:/opencv/opencv-build
  • 1


保持默认MinGW Makefiles,点击Specify native compilers,再next

编译器选择:这里自己的安装路径
C语言

D:/Qt5.12.2/Tools/mingw730_64/bin/gcc.exe
  • 1

C++

D:/Qt5.12.2/Tools/mingw730_64/bin/g++.exe
  • 1

Fortran不用填

需要下拉,选中下面这两个WITH_OPENGL和WITH_QT

出现错误

错误信息

CMake Error at cmake/OpenCVFindLibsGUI.cmake:18 (find_package):Could not find a package configuration file provided by "Qt5" with any ofthe following names:Qt5Config.cmakeqt5-config.cmakeAdd the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"to a directory containing one of the above files.  If "Qt5" provides aseparate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):CMakeLists.txt:685 (include)Configuring incomplete, errors occurred!

解决办法
在Opencv文件夹sources底下,也就是上面配置source code 的地址:D:/opencv/sources
在CMakeLists.txt文件下添加,位置如图所示

set (CMAKE_PREFIX_PATH "D:\\Qt5.12.2\\5.12.2\\mingw73_64\\")
  • 1

这里是cmake配置opencv时候的编译器选项位置


完成之后来到下面的界面

然后再次点击configure,然后显示configuring done

此时,可以选择关闭Cmake,打开
where to build the binaries

D:/opencv/opencv-build
  • 1

可以看到如下生成的文件

鼠标放在该文件夹内,按住Shift键右击鼠标,选择在此处打开Powershell窗口

在Powershell中输入

mingw32-make -j 8
  • 1

据参考博客的博主所言:这里的-j 8是为了让CPU进行多任务处理,可以加快编译速度

进行到40%发生错误(这是没有添加opencv-contrib扩展库时候的报错)

gcc: error: long: No such file or directory
D:\Qt5.12.2\Tools\mingw730_64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1495: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
mingw32-make[1]: *** [CMakeFiles\Makefile2:1889: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:182: all] Error 2
PS D:\opencv\opencv-build>

解决办法
在stackoverflow上面看到同样的问题https://stackoverflow.com/questions/61707195/error-building-opencv-with-mingw-qt-windows

打开我们新建的opencv-build文件下该路径

D:\opencv\opencv-build\modules\core\CMakeFiles\opencv_core.dir
  • 1


打开flags.make,然后把RC-DEFINES(下面划线部分)替换掉

替换代码(注:cmake每configure和generate之后都需要更改这个文件)

RC_DEFINES = -DCVAPI_EXPORTS -D_USE_MATH_DEFINES -D_WIN32_WINNT=0x0601 -D__OPENCV_BUILD=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS

最终编译完成

100%之后输入

mingw32-make install

完成之后退出

现在需要将以下路径添加环境变量

D:\opencv\opencv-build\install\x64\mingw\bin

5.测试Qt程序

新建project

选择默认的项目Application-Qt Widgets Application

项目命名和位置:注意这里不能有中文路径,下面是错误的示范,后面笔者又新建项目,重新改成英文的路径,否则会报错

默认下一步

继续下一步

点击完成

在test.pro文件该位置添加如下代码

注意不要写成这种形式:

//这是错误的代码
INCLUDEPATH += D:\opencv\opencv-build\install\include
LIBS += D:\opencv\opencv-build\lib\

正确的代码

INCLUDEPATH += D:\opencv\opencv-build\install\include
LIBS += D:\opencv\opencv-build\lib\libopencv_*.a


在mainwindow.cpp文件下添加相应的包,添加代码如下

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
 Mat image=imread("D:\\m1521\\Pictures\\Saved Pictures\\cute-2528119.jpg",1);namedWindow( "Display window", WINDOW_AUTOSIZE );imshow("Display window", image );

点击左下角的锤子,进行构建

会显示正确的信息如下

01:55:07: 为项目test执行步骤 ...
01:55:07: 配置没有改变, 跳过 qmake 步骤。
01:55:07: 正在启动 "D:\Qt5.12.2\Tools\mingw730_64\bin\mingw32-make.exe" -j8D:/Qt5.12.2/Tools/mingw730_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'D:/m1521/Documents/Qt_opencv/test/build-test-Desktop_Qt_5_12_2_MinGW_64_bit-Debug'
mingw32-make[1]: Nothing to be done for 'first'.
mingw32-make[1]: Leaving directory 'D:/m1521/Documents/Qt_opencv/test/build-test-Desktop_Qt_5_12_2_MinGW_64_bit-Debug'
01:55:08: 进程"D:\Qt5.12.2\Tools\mingw730_64\bin\mingw32-make.exe"正常退出。
01:55:08: Elapsed time: 00:01.

点击绿色的箭头运行

测试结果
显示出图片

至此,Qt5配置OpenCV安装配置完成!

第二部分 配置opencv_contrib扩展库

该部分在第一部分的基础上,配置opencv_contrib,本文结构这样安排的目的在于:第一,笔者先是安装了qt和opencv,当时没想到要使用opencv_contrib扩展库,也就是说这是笔者真实的安装过程;第二,基于对读者的换位思考。经过上面第一部分的配置工作,读者可能初步产生配置成功的喜悦,以更好的状态进入到扩展库的部分。

6.添加opencv_contrib扩展库

1.下载opencv扩展库,下载地址opencv_contrib全部版本下载地址

选择版本4.3.0
解压完:

2.编译的事前准备
打开路径:在D:\opencv\sources\cmake下面找到OpenCVCompilerOptions.cmake文件,打开它并找到add_extra_compiler_option(-Werror=non-virtual-dtor),
将其注释掉,如:
#add_extra_compiler_option(-Werror=non-virtual-dtor)
(这一步,笔者不知道是干嘛所用)
这一步参考该篇博文:qt5(mingw版) opencv3.0(含contrib扩展)配置详解

由于是后面补充的contrib扩展库,打开Cmake,在第一部分配置成功后选中下面这个NONFREE

再搜索path,找到OPENCV-EXTRA-MODULES_PATH,配置value,找到解压后的扩展库,路径到modules文件,这里配置value

下面便可以点击generate,显示generating done
每次generate之后都要经过第4步修改flags.make 文件,请参考第4步
(如果电脑没有安装cuda,请去掉勾选BUILD_CUDA_STUBS,否则会找不到cuda从而报错)

然后generate(下面这是错误的图,因为未去掉BUILD_CUDA_STUBS)

然后开始重复上面没有配置opencv_contrib的步骤4:编译OpenCV
在Powershell中输入

mingw32-make -j 8

在26%遇到问题

[ 26%] Building CXX object modules/ml/CMakeFiles/opencv_ml.dir/src/em.cpp.obj
[ 26%] Building CXX object modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/approx.cpp.obj
[ 26%] Building CXX object modules/ml/CMakeFiles/opencv_ml.dir/src/gbt.cpp.obj
[ 26%] Building CXX object modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/bilateral_filter.dispatch.cpp.obj
[ 26%] Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/lut.cpp.obj
In file included from D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\cudaarithm\src\lut.cpp:7:0:
D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\cudaarithm\src\lut.hpp:10:10: fatal error: cuda_runtime.h: No such file or directory#include <cuda_runtime.h>^~~~~~~~~~~~~~~~
compilation terminated.
mingw32-make[2]: *** [modules\cudaarithm\CMakeFiles\opencv_cudaarithm.dir\build.make:125: modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/lut.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:4335: modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/all] Error 2
mingw32-make[1]: *** Waiting for unfinished jobs...

这个问题的解决需要去掉勾选BUILD_CUDA_STUBS

后面遇到错误

error: 'GL_RENDERBUFFER_EXT' was not declared in this scopeglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo_depth);

解决办法:如果出现dynafu.cpp的错误,BUILD_opencv_rgbd与WITH_OPENGL只能勾选其一
去掉勾选BUILD_opencv_rgbd

还发现这样的错误


[ 56%] [ 56%] Scanning dependencies of target opencv_aruco
Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.objBuilding CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/brief.cpp.obj[ 56%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/daisy.cpp.obj
[ 56%] [ 56%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/ellipticKeyPoint.cpp.objBuilding CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/fast.cpp.obj[ 58%] Built target opencv_bioinspired
[ 58%] Built target opencv_ximgproc
Scanning dependencies of target opencv_ccalib
Scanning dependencies of target opencv_dnn_objdetect
D:\opencv_contrib-3.4\opencv_contrib-3.4\modules\xfeatures2d\src\boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: No such file or directory#include "boostdesc_bgm.i"^~~~~~~~~~~~~~~~~
compilation terminated.
mingw32-make[2]: *** [modules\xfeatures2d\CMakeFiles\opencv_xfeatures2d.dir\build.make:102: modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....

按照这个教程下载zip包,解压之后

安装OpenCV时提示缺少boostdesc_bgm.i文件的问题解决方案(附带百度云资源)

在这个路径内复制

D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\xfeatures2d\src

结果跑到88%还是有错误

 fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory#include "features2d/test/test_detectors_regression.impl.hpp"

此处bug参考:树莓派4的opencv4.1.0–python3.7的开发环境安装
我们回到opencv4.3.0文件夹下复制下面两个文件到报错的路径下

复制到如下路径(总共需要复制5个hpp文件

D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\xfeatures2d\test
  • 1

修改test_features2d.cpp文件(具体修改哪个文件,需要查看报错的位置,哪个文件引用)
修改之前

#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"

修改之后

#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
  • 1
  • 2

发现成功一处,还有一处错误

打开test_rotation_and_scale_invariance.cpp文件
修改前

修改后

#include "test_detectors_invariance.impl.hpp" // main OpenCV repo
#include "test_descriptors_invariance.impl.hpp" // main OpenCV repo


还有错误

同样的步骤,把相应的文件复制过来,结果100%成功

100%之后输入

mingw32-make install
  • 1

完成之后退出

7.测试使用opencv扩展库的Qt程序

请参考第5步:测试Qt程序
这里只是在配置了opencv_contrib之后,引入头文件#include <opencv2/xfeatures2d.hpp>
在mainwindow.cpp文件下添加相应的包,添加代码如下

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
 Mat image=imread("D:\\m1521\\Pictures\\Saved Pictures\\cute-2528119.jpg",1);namedWindow( "Display window", WINDOW_AUTOSIZE );imshow("Display window", image );

到这里:完整的Qt Creator5.12+OpenCV4.3.0+opencv_contrib4.3.0配置就完成了!

8.本文使用的软件百度网盘下载

链接:https://pan.baidu.com/s/1_gRt_bHAjKq6tRlKgF8FLQ
提取码:4qmo
附上编译后的文件夹opencv-build

参考博客:
两个博客都有用
[1]【Qt5.12】Qt5.12安装教程
[2]win10系统Qt5.12配置OpenCV4.0.1库教程暨Qt,OpenCV,Cmake详细下载安装教程(史上最全!)

qt调用opencv汇总(2)相关推荐

  1. Qt调用OpenCV汇总(1)

    //************************************************************************************************** ...

  2. 在Qt调用OpenCV库编写GUI程序

    写在前面 OpenCV本身自带的HighGUI库就可以完成一部分GUI设计编写工作,无奈其中控件实在太少,除了按钮就是滚动条,OpenCV中文站上曾经给出了OpenCV和MFC的搭配调用,但是Open ...

  3. QT调用opencv的videowrite类输出生成视频打不开(已解决)

    用尽网上所有方法都不行,最后发现是因为用了网上的方法QImage转Mat后就发生这样的情况,至今不知道原因. 解决方法是把每一张图片都用imwrite在本地保存再用imread读出来再保存成视频.最后 ...

  4. Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)

    目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...

  5. linux下QT工程调用opencv、libtorch,并用cmake编译,及其遇到的一些问题的解决方法

    linux下QT工程调用opencv.libtorch,并用cmake编译: 文章目录 一.新建QT工程 二.编写CMakeLists.txt文件 三.各个文件的内容如下: 1.mainwindow. ...

  6. 在Ubuntu中用Qt基于OpenCV调用大恒相机

    在Ubuntu中用Qt基于OpenCV调用大恒相机 前言 视觉萌新买了工业相机却不会用,上网也查不到具体方法,没办法只能自己硬刚了.刚开始自己摸索,碰到好多问题解决不了,Qt报错不知道咋回事,缺少的链 ...

  7. Qt中调用OpenCV函数库时Crashed问题的解决。

    这几天想在虚拟机上搭建Ubuntu的开发环境,包括了Matlab和QT(C++)的开发工具安装等,同时由于做图像处理,所以还必须要安装FFMPEG和OpenCV库.下面就讲讲我们安装时出现qt中调用O ...

  8. Linux编译安装opencv 使用QT调用

    首先去opencv官网下载源码,选择对的3.4.9版本 安装cmake xzw@xzw:~/work$ cmake-guiCommand 'cmake-gui' not found, but can ...

  9. Qt:OpenCV—Q图像处理基本操作(Code)

    原文链接:http://www.cnblogs.com/emouse/archive/2013/03/31/2991333.html 作者写作一系列:http://www.cnblogs.com/em ...

最新文章

  1. 在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务
  2. 解决protobuf import路径的问题
  3. Hadoop运维记录系列(十)
  4. 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学
  5. SAP odata消费失败的故障排错
  6. find命令过滤 no such_运维老手常用的linux命令操作
  7. java制作oracle程序,Java程序操作Oracle两种方式之简单实现
  8. Servlet Cookie 处理
  9. 下载神器aria2的yaaw WebUI用法
  10. #AD18#PCB绘制时合并铜皮
  11. 投影幕布jsp_发现篇:亿立投影幕布真实使用感受诉说不看后悔 | 智能扫地机器人评测...
  12. 软件扫描出rsh漏洞,但是并无安装rsh服务,原因是为何?
  13. 以自动开发票为例,解析RPA(机器人流程自动化)在财务场景的使用
  14. Tableau中的筛选器
  15. 防火墙——防火墙基础知识
  16. matlab 路由表,闭关修炼之zigbee路由
  17. Pandas方法实践-2012美国总统竞选赞助数据分析
  18. pathway common:综合性的pathway数据库
  19. 泛在操作系统功能特点
  20. Nature:交互式语言的语音规划网络

热门文章

  1. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示
  2. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例
  3. search.php制作,重写搜索Search类
  4. mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战
  5. linux tree命令源码,[转帖]linux tree命令--显示目录的树形结构
  6. 税收java_String 类中的 isEmpty() 是判断字符串是否为空的,如果为空返回 true ,不为空返回 false 。 (1.0分)_学小易找答案...
  7. win8看不到win7局域网计算机名,实现Win7旗舰版与win8.1系统局域网里文件共享的设置方法【图】...
  8. 基于python的人脸识别技术_用Python写个简单但强大的人脸识别系统
  9. Java connot reduce_Java8: Reduce方法
  10. 「第一弹」电子设计大赛应该准备什么?