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

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

本章博客涉及代码以及编译好的opencv库文件,关注以下公众号,回复关键字qt-cv454获取下载链接!
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

(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:使用的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)详细过程

这是由于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)详细过程

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

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

填入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)详细过程

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

首先添加opencv_contrib扩展的编译,搜索找到OPENCV_EXTRA_MODULES_PATH,填入opencv扩展模块的目录:E:/opencv/opencv_contrib-4.5.4/modules
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

搜索WITH_QT并检查它,并检查WITH_OPENGL
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

点击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)详细过程

(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)详细过程

(4)Qt使用Opencv4.5.4 测试

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

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

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

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

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

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

编写一个测试程序:
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

编译运行,程序无法启动:
Qt、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程
这就是由于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程序,正常运行了!

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

(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、MinGW编译OpenCV 4.5.4(包含opencv_contrib)详细过程

ends…

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年3月21日 下午3:11
下一篇 2022年3月21日 下午8:43

相关推荐