最近需要在Qt中使用opencv,查阅了各位大佬们的文章,前后遇到了很多教程中未提及的问题,主要是CMake opencv时遇到的,查找和筛选了大量资料,一点点找出了原因和解决办法。此处附上大佬们的原文链接,以及需要的部分资源。希望这篇文章能帮助大家更快捷地找到答案,更顺利地完成配置。
要在Qt中使用opencv,需要用CMake编译生成Qt可用的opencv库,过程中主要遇到了以下问题:
1.cMake安装及环境变量设置;
2.VTK源码更改——解决cmake编译opencv时报找不到Qt5_DIR的问题;
3.生成时opencv_ffmpeg_64.dll、opencv_ffmpeg.dll、ffmpeg_version.cmake和ippicv_2017u3_win_intel64_general_20170822.zip文件无法下载的问题;
4.执行mingw32-make时报错:
mingw32-make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj] Error 1
mingw32-make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
参考链接:
链接: https://blog.csdn.net/wzj0808/article/details/79388446.
链接: https://blog.csdn.net/webzhuce/article/details/79960512.
链接: https://blog.csdn.net/fengxueniu/article/details/77478669.
链接: http://blog.csdn.net/fengxueniu/article/details/77478669.
链接: https://blog.csdn.net/KayChanGEEK/article/details/79919417.
资源文件
1.opencv_ffmpeg.dll和opencv_ffmpeg_64.dll:
: 链接: https://download.csdn.net/download/qq_39040678/12480593.
2.ffmpeg_version.cmake和ippicv_2017u3_win_intel64_general_20170822.zip:
: 链接: https://download.csdn.net/download/qq_39040678/12484220.
本文所用版本:
Qt:5.11.2
opencv:3.4.1
cMake:3.17.1
在系统环境变量Path中添加Qt路径和CMake安装路径,删除已安装过的mingw路径:
若配置CMake时第一步就报错,检查一下环境变量是否正确。
参考网站:链接: https://blog.csdn.net/wzj0808/article/details/79388446.
选择opencv源码路径路径,以及buildopencv存储的位置。
CMAke修改配置:
勾选WITH_OPENGL,WITH_QT,确认WITH_IPP是未勾选状态。点击左下角configure:
此时会出现红色报错,CMake配置过程中出现找不到Qt5_DIR的一系列文件:
为解决这个问题,此处更改VTK源码。
参考网站:链接: https://blog.csdn.net/webzhuce/article/details/79960512.
解决方法:进入CMakeLists.txt中,在第二行添加:
set(Qt5_DIR “F:/softWare/codeApp/Qt/Qt5.11.2/5.11.2/msvc2015_64/lib/cmake/Qt5”)
再次点击configure,即可完成配置。
点击Generate开始生成。然后惊喜来了:
查了一下发现生成的时候需要在外网来下载opencv_ffmpeg_64.dll、opencv_ffmpeg.dll、ffmpeg_version.cmake和ippicv_2017u3_win_intel64_general_20170822.zip几个文件,无法连接外网自然就下载失败了,此处就手动下载后放在相应的文件夹下。
参考网站:链接: https://blog.csdn.net/KayChanGEEK/article/details/79919417.
(这位KayChanGeek大佬写的很可爱,非常感谢他的文章,受益匪浅)
缺失的四个文件:
资源地址
文件重命名
下载好四个文件后,进入opencv/ources/.cache/ffmpeg文件夹,将下载的opencv_ffmpeg.dll、opencv_ffmpeg_64.dll和ffmpeg_version.cmake重命名为文件夹中0KB文件对应的名字。举个栗子,我的是:
opencv_ffmpeg.dll 改为
b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll
文件放置
由cmd进入buildopencv文件夹,执行mingw32-make -v查看变量是否生效:
这样就是生效了。然后执行mingw32-make指令:
mingw32-make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj] Error 1
mingw32-make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
参考网站:
链接: http://blog.csdn.net/fengxueniu/article/details/77478669.
打开opencv的源码文件cap_dshow.cpp,在#include "DShow.h"这行的上面加一行#define NO_DSHOW_STRSAFE:
重新执行mingw32-make指令:
终于成功了。