发布时间:2024-11-10 16:01
本章博客涉及代码以及编译好的opencv库文件,关注以下公众号,回复关键字qt-cv454
获取下载链接!
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/
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() {}
这是由于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版本,只要使用的工具版本跟着我这步骤来,必定能编译通过!
打开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
就没了,
进入目录E:/opencv/opencv-4.5.4/build,执行命令:mingw32-make -j 4
进行编译,-j 4
的意思是四核一块编译,这样能够加快编译速度,我在编译过程中一个问题也没出现。
编译完成后,执行命令mingw32-make install
,此时就已经默认安装到了E:/opencv/opencv-4.5.4/build/install目录下,如下图所示:
在测试前,要先把刚编译好的opencv
4.5.4 库加入系统环境变量,最好重启一下电脑,否则Qt由于找不到链接库,程序运行不起来。
新建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找不到opencv的动态链接库导致的,由于我没有重启电脑,所以这里我直接将目录E:\\opencv\\opencv-4.5.4\\build\\install\\x64\\mingw\\bin
下的.dll文件直接拷贝到了opencv-test.exe目录下:
然后在运行Qt程序,正常运行了!
在使用CMake点击Configure
后,会下载一些必要的文件,而且下载的过程很慢,务必保持网络通畅!
有时候一些文件一直下载不下来,那么我的解决办法是,Configure
完成之后,会在E:\\opencv\\opencv-4.5.4\\build目录下生成一个CMakeDownloadLog.txt文件,该文件中记录了所需下载文件的网址,你可以手动下载然后放进相应的目录中!
以opencv_videoio_ffmpeg_64.dll
这个文件为例,操作步骤如下:
ends…