0
点赞
收藏
分享

微信扫一扫

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程


Qt、MinGW、CMake编译OpenCV 4.5.4(包含opencv_contrib)详细过程

目录

  • ​​Qt、MinGW、CMake编译OpenCV 4.5.4(包含opencv_contrib)详细过程​​
  • ​​(1)工具下载准备​​
  • ​​(2)CMake编译前配置​​
  • ​​(3)编译和安装​​
  • ​​(4)Qt使用Opencv4.5.4 测试​​
  • ​​(5)注意事项​​

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_qt

(1)工具下载准备

  • CMake下载:​​https://cmake.org/download/​​,我使用的版本是3.22.3
  • OpenCV源码下载:​​https://github.com/opencv/opencv/tags​​
  • opencv_contrib源码下载:​​https://github.com/opencv/opencv_contrib/tags​​
  • Qt 5.14.2,下载地址:​​https://download.qt.io/archive/qt/5.14/5.14.2/​​
  • Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_mingw_02

  • MinGW:使用的Qt5.14.2自带的MinGW(gcc版本为7.3.0)

注意:编译的opencv_contrib要跟OpenCV的版本对应!!!

问: 为什么选用OpenCV 4.5.4这个版本?

答: 截止2022年3月17日,opencv的最新版本为4.5.5,我最初编译使用的就是opencv4.5.5,但是该版本的protobuf版本为3.19,使用的Qt5.14.2自带的MinGW编译回报错误编译不过去,具体错误为:

E:/opencv/opencv-4.5.5/3rdparty/protobuf/src/google/protobuf/stubs/mutex.h:124:29: error: temporary of non-literal type 'google::protobuf::internal::CallOnceInitializedMutex<std::mutex>' in a constant expression
constexpr WrappedMutex() {}

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_mingw_03

这是由于protobuf这个版本太新了,Qt5.14.2中MinGW的gcc版本还不支持这种C++新语法,所以我再去查看OpenCV 4.5.4版本中protobuf版本发现是3.5.1,这个版本旧没有用到C++语法的新特性,所以编译没有出现问题。

在一个原因是编译OpenCV 4.5.5勾选WITH_OPENGL后,编译也过不去,还没有找到问题所在,具体错误为:

[ 28%] Linking CXX shared library ..\..\bin\libopencv_highgui455.dll
CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort12initializeGLEv+0x14): undefined reference to `_imp__glHint@8'
CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort8resizeGLEii+0x24): undefined reference to `_imp__glViewport@16'
CMakeFiles\opencv_highgui.dir/objects.a(window_QT.cpp.obj):window_QT.cpp:(.text$_ZN14OpenGlViewPort7paintGLEv+0xf): undefined reference to `_imp__glClear@4'

综上原因,顾选定为OpenCV 4.5.4版本,只要使用的工具版本跟着我这步骤来,必定能编译通过!

(2)CMake编译前配置

打开CMake,点击​​Browser Source...​​选择opencv源码目录,然后在填入opencv编译配置的目录:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_计算机视觉_04

然后选择编译makefile的类型问MinGW,手动指定本地编译工具链,点后点Next:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_mingw_05

填入C编译器的目录:E:/install/Qt/Qt5.14.2/Tools/mingw730_32/bin/gcc.exe
填入C++编译器的目录:E:/install/Qt/Qt5.14.2/Tools/mingw730_32/bin/g++.exe
然后点Finish即可。

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_mingw_06

点Finish后会进入主界面进行配置,配置完成后必定会出现一堆红,先不用管。

首先添加opencv_contrib扩展的编译,搜索找到​​OPENCV_EXTRA_MODULES_PATH​​,填入opencv扩展模块的目录:E:/opencv/opencv_contrib-4.5.4/modules

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_qt_07

搜索 ​​WITH_QT​​​,并勾选,同样的也勾选​​WITH_OPENGL​​:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_mingw_08


Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_Qt_09

在点击​​Configure​​,

找到​​QT_QMAKE_EXECUTABLE​​,填入Qt的qmake目录:E:/install/Qt/Qt5.14.2/5.14.2/mingw73_32/lib/cmake/Qt5

找到Qt5_DIR,填入Qt5的目录:E:/install/Qt/Qt5.14.2/5.14.2/mingw73_32/bin/qmake.exe

以上就是所有配置步骤。

在点击​​Configure​​​即可,有红色显示没关系,多点几次​​Configure​​就没了,

没红色之后,再点击​​Generate​​生成工程即可,如下图:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_Qt_10

(3)编译和安装

进入目录E:/opencv/opencv-4.5.4/build,执行命令:​​mingw32-make -j 4​​​进行编译,​​-j 4​​的意思是四核一块编译,这样能够加快编译速度,我在编译过程中一个问题也没出现。

编译完成后,执行命令​​mingw32-make install​​,此时就已经默认安装到了E:/opencv/opencv-4.5.4/build/install目录下,如下图所示:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_计算机视觉_11

(4)Qt使用Opencv4.5.4 测试

在测试前,要先把刚编译好的opencv
4.5.4 库加入系统环境变量,最好重启一下电脑,否则Qt由于找不到链接库,程序运行不起来。

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_Qt_12

新建Qt工程opencv-test,在.pro文件中加入opencv的头文件和库文件包含:

INCLUDEPATH += E:\opencv\opencv-4.5.4\build\install\include

LIBS += E:\opencv\opencv-4.5.4\build\install\x64\mingw\lib\libopencv_*.a

编写测试程序:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>

using namespace cv; // 引入opencv的命名空间

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);

Mat image(cv::Size(300, 300), CV_8U, Scalar(255, 0, 0)); // 300X300大小的白色图片
imshow("opencv test", image); // 显示图片
}

MainWindow::~MainWindow()
{
delete ui;
}

编译运行,程序启动不起来:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_Qt_13

这就是由于Qt找不到opencv的动态链接库导致的,由于我没有重启电脑,所以这里我直接将目录​​E:\opencv\opencv-4.5.4\build\install\x64\mingw\bin​​下的.dll文件直接拷贝到了opencv-test.exe目录下:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_qt_14

然后在运行Qt程序,正常运行了!

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_opencv_15

(5)注意事项

在使用CMake点击​​Configure​​后,会下载一些必要的文件,而且下载的过程很慢,务必保持网络通畅!

有时候一些文件一直下载不下来,那么我的解决办法是,​​Configure​​完成之后,会在E:\opencv\opencv-4.5.4\build目录下生成一个CMakeDownloadLog.txt文件,该文件中记录了所需下载文件的网址,你可以手动下载然后放进相应的目录中!

以​​opencv_videoio_ffmpeg_64.dll​​这个文件为例,操作步骤如下:

Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_Qt_16


Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程_计算机视觉_17

ends…


举报

相关推荐

0 条评论