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

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


本章博客涉及代码以及编译好的opencv库文件,关注以下公众号,回复关键字qt-cv454获取下载链接!


(1)工具下载准备

注意:编译的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() {}

这是由于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编译配置的目录:

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

填入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即可。

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

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

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

在点击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生成工程即可,如下图:


(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目录下,如下图所示:


(4)Qt使用Opencv4.5.4 测试

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

新建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找不到opencv的动态链接库导致的,由于我没有重启电脑,所以这里我直接将目录E:\opencv\opencv-4.5.4\build\install\x64\mingw\bin下的.dll文件直接拷贝到了opencv-test.exe目录下:

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


(5)注意事项

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

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

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


ends…

  • 17
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觉皇嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值