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

发布时间:2024-11-10 16:01

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)注意事项

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


(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

  • 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\' in a constant expression
  constexpr WrappedMutex() {}

\"Qt、MinGW编译OpenCV

这是由于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

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

\"Qt、MinGW编译OpenCV

填入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

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

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

搜索 WITH_QT,并勾选,同样的也勾选WITH_OPENGL
\"Qt、MinGW编译OpenCV
\"Qt、MinGW编译OpenCV

在点击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


(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)Qt使用Opencv4.5.4 测试

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

\"Qt、MinGW编译OpenCV

新建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

编写测试程序:
\"Qt、MinGW编译OpenCV

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

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

\"Qt、MinGW编译OpenCV


(5)注意事项

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

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

opencv_videoio_ffmpeg_64.dll这个文件为例,操作步骤如下:
\"Qt、MinGW编译OpenCV
\"Qt、MinGW编译OpenCV


ends…

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号