概述
Table of Contents
前言
Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0
Windows 10, OpenCV4.0.0, Qt5.9.3, CMake3.12.1, MinGW5.3.0
OpenCV3.4.2 + Contrib3.4.2 + Qt5.9 + CMake3.12.1编译
资料准备
开启CMake GUI
CMake之Qt相关设置
CMake必要的设置
检查CMake设置
Generate
控制台编译
Contrib配置
踩坑笔记
Issue#0:ffmpeg下载问题:Couldn't connect to server/Timeout
Issue#1:勾选ENABLE_CXX11
Issue#3:取消勾选"WITH_MSMF"
Issue#2:在cap_dshow.cpp的文件中加宏定义“#define NO_DSHOW_STRSAFE”
Issue#3:取消勾选"WITH_MSMF"
Issue#4:取消勾选BUILD_opencv_hdf
Issue#5:取消勾选BUILD_opencv_world
Issue#6:取消勾选"ENABLE_PRECOMPILED_HEADERS"
Issue#7:Python3版编译失败
Issue#8.取消勾选BUILD_opencv_gapi【OpenCV4.0.0有此问题,OpenCV4.0.1已经修复】
Issue#9 'FILTER_SCHARR' was not declared in this scope
Qt+OpenCV配置
新建Qt项目
Qt + OpenCV配置
1. 添加环境变量【建议重启电脑】
2. 在TestOpenCV.pro文件中添加包含文件
3.在TestOpenCV.pro文件中添加library
代码验证及效果图
代码1 - 简单验证普通版OpenCV
代码1 - 效果图
代码2 - 简单验证Contrib版OpenCV(使用SIFT特征比对)
代码2 - 效果图
编译所需的.cache文件 - Qt5.9+VS2013/VS2015
OpenCV3.4.2:Qt5.9+VS2013用同一份
OpenCV4.0.1:VS2015
OpenCV4.0.1:Qt5.9
编译好的OpenCV版本链接 - Qt5.9+VS2013
opencv342Qt5.9
opencv342Qt5.9_world
opencv342Qt5.9Contrib
opencv342Vs2013_world
opencv342Vs2013Contrib
opencv342Vs2013Contrib_world
opencv401Qt5.9Contrib
OpenCV + Python版
参考文章
前言
这两天重新编译OpenCV+Visual Studio,顺带着把OpenCV+Qt5.9一起编译了。
详细请参考OpenCV3.4.2 + Contrib3.4.2 + Qt5.9 + CMake3.12.1编译过程、配置及验证。
OpenCV4.0的编译新手建议使用OpenCV4.0.1(非4.0.0),懒人直接去文章末尾下载我编译好的OpenCV版本。
想要体验编译乐趣的高级玩家请务必先看完本文,再动手,以后就可以自行编译需求版本。
教程用的是OpenCV3.4.2。
若有需补充的地方,欢迎大家留言。
Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0
汇总CMake及其他配置
- 勾选WITH_QT,WITH_OPENGL ,不能勾选WITH_IPP(默认不勾选)
- 取消选中"WITH_MSMF"
- 修改“D:softwareOpenCVSourceCodeopencv-4.0.1modulesvideoiosrccap_dshow.cpp”的文件,在#include "cap_dshow.hpp"前加宏定义“#define NO_DSHOW_STRSAFE”
- 取消选中"Build_opencv_python3"和"BUILD_opencv_python_bindings_generator"【我Python2编译成功,但是Python3编译失败,具体还没仔细研究,暂时用不到,就先取消勾选;电脑上不要同时装有python2和python3。如果需要可以去pip3 install,不用自己编译;需要python3版的OpenCV就选中;不要python2的也可以取消选中;电脑上不要同时装有python2和python3,最后只有Python2编译成功,Python3失败。具体参考后面“踩坑笔记”】
- 取消勾选BUILD_opencv_world:
- Set CMAKE_BUILD_TYPE to Release or RelWithDebInfo【我选的Release,生成release版;需要debug版的选debug;RelWithDebInfo:Release版并带有Debug信息】
- .cache问题:除非各位的环境和版本与我的一样,用同样的.cache文件,否则会出现这个问题mismatch_md5。解决办法参考后面“踩坑笔记”
- 在这个选项填入Contrib的位置【精确到modules文件夹】
OPENCV_EXTRA_MODULES_PATH:
我的路径为:D:/software/OpenCV/SourceCode/opencv_contrib-3.4.2/modules
9. 取消选中BUILD_opencv_hdf【H5Type深度学习中的一种文件格式】
10. 勾选OPENCV_ENABLE_NON_FREE选项。【专利算法模块,包含特征检测和GPU相关的内容】
【OpenCV4.0已经没有这个选项了,它默认支持C++11】
- 勾选ENABLE_CXX11
【OpenCV4.0.1已经修复的问题如下,就保持默认就好,大家可以看看。感谢开源代码的Contributors!!!】
- 在opencv_contrib-4.0.1modulescvvsrcqtutilfiltersobelfilterwidget.cpp文件中添加using namespace cv;
- BUILD_opencv_gapi(默认勾选)【OpenCV4.0添加了全新的opencv_gapi模块。 它是非常有效的图像处理的引擎,基于处理图的lazy评估和动态构造(因此名称为Graph API或G-API)。 有关详细信息,请参见Graph API(G-API)】
以上详细请参考后面“踩坑笔记”。
Windows 10, OpenCV4.0.0, Qt5.9.3, CMake3.12.1, MinGW5.3.0
汇总CMake及其他配置
- 勾选WITH_QT,WITH_OPENGL ,不能勾选WITH_IPP(默认不勾选)
- 取消选中"WITH_MSMF"
- 修改“D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_dshow.cpp”的文件,在#include "cap_dshow.hpp"前加宏定义“#define NO_DSHOW_STRSAFE”
- 取消选中"Build_opencv_python3"和"BUILD_opencv_python_bindings_generator"【我Python2编译成功,但是Python3编译失败,具体还没仔细研究,暂时用不到,就先取消勾选;电脑上不要同时装有python2和python3。如果需要可以去pip3 install,不用自己编译;需要python3版的OpenCV就选中;不要python2的也可以取消选中;电脑上不要同时装有python2和python3,最后只有Python2编译成功,Python3失败。具体参考后面“踩坑笔记”】
- 取消勾选BUILD_opencv_world:若勾选了在生成的文件夹installx86mingwlib中就只有一个libopencv_world342.dll.a;否则有很多个libxxx.dll.a,我生成的里面有17个【注意:Contrib版不能勾选这个,普通版可以勾选这个】
- Set CMAKE_BUILD_TYPE to Release or RelWithDebInfo【我选的Release,生成release版;需要debug版的选debug】
- .cache问题:除非各位的环境和版本与我的一样,用同样的.cache文件,否则会出现这个问题mismatch_md5。解决办法参考后面“踩坑笔记”
- 在D:softwareOpenCVSourceCodeopencv-4.0.0modulesgapicmakeinit.cmake的开头添加
OCV_OPTION(WITH_ADE "Enable ADE framework (required for Graph API module)" ON)
if(NOT WITH_ADE)
return()
endif()
然后保存,关闭档案
详细请参考后面踩坑笔记【OpenCV4.0.1有修复此问题,可以改用OpenCV4.0.1编译】
9. 取消勾选BUILD_opencv_gapi【OpenCV4.0添加了全新的opencv_gapi模块。 它是非常有效的图像处理的引擎,基于处理图的lazy评估和动态构造(因此名称为Graph API或G-API)。 有关详细信息,请参见Graph API(G-API)】【OpenCV4.0.1已结修复此问题】
10. 在这个选项填入Contrib的位置【精确到modules文件夹】
OPENCV_EXTRA_MODULES_PATH:
我的路径为:D:/software/OpenCV/SourceCode/opencv_contrib-3.4.2/modules
11. 取消选中BUILD_opencv_hdf【H5Type为深度学习中的一种文件格式】
12. 勾选OPENCV_ENABLE_NON_FREE选项。【专利算法模块,包含特征检测和GPU相关的内容】
13. 在opencv_contrib-4.0.0modulescvvsrcqtutilfiltersobelfilterwidget.cpp文件中添加
using namespace cv;
我的文件路径:D:softwareOpenCVSourceCodeopencv_contrib-4.0.0modulescvvsrcqtutilfiltersobelfilterwidget.cpp【OpenCV4.0.1已结修复此问题】
【OpenCV4.0已经没有这个选项了,它默认支持C++11】
- 勾选ENABLE_CXX11
以上详细请参考后面“踩坑笔记”。
OpenCV3.4.2 + Contrib3.4.2 + Qt5.9 + CMake3.12.1编译
资料准备
opencv:版本3.4.2
https://github.com/opencv/opencv/releases【建议下载release版】
opencv_contrib: 版本3.4.2
https://github.com/opencv/opencv_contrib/releases【建议下载release版】
Cmake3.12.1
https://github.com/Kitware/CMake/releases?after=v3.13.1
Qt 5.9.3【理论上其他5.9版本也可以】
http://download.qt.io/archive/qt/5.9/5.9.3/
开启CMake GUI
诀窍:configure#1 -> configure#2 -> configure#3 [-> configure#4 -> configure#5] -> Generate -> 控制台编译
需要编译Contrib3.4.2的要点五次configure,不需要的只用三次即可
Where is the source code: D:/software/OpenCV/SourceCode/opencv-3.4.2
Where to build the binaries: D:/software/OpenCV/opencv342_Qt5.9
第一次点击Configure
CMake之Qt相关设置
Specify the generator for this project: MinGW Makefiles
Specify native compilers, next
Compilers C: D:QtQt5.9.3Toolsmingw530_32bingcc.exe
Compilers C++: D:QtQt5.9.3Toolsmingw530_32bing++.exe
Finish
CMake必要的设置
出现这个画面(有很多红色背景)
- 勾选WITH_QT,WITH_OPENGL ,不能勾选WITH_IPP(默认不勾选)
- 取消选中"WITH_MSMF"
- 勾选ENABLE_CXX11
- 修改“D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_dshow.cpp”的文件,在#include "cap_dshow.hpp"前加宏定义“#define NO_DSHOW_STRSAFE”
- BUILD_opencv_world:若勾选了在生成的文件夹installx86mingwlib中就只有一个libopencv_world342.dll.a;否则有很多个libxxx.dll.a,我生成的里面有17个【注意:Contrib版不能勾选这个,普通版可以勾选这个】
- 取消选中"Build_opencv_python3"和"BUILD_opencv_python_bindings_generator"【我Python2编译成功,但是Python3编译失败,具体还没仔细研究,暂时用不到,就先取消勾选;电脑上不要同时装有python2和python3。】
【2-5】详细请参考后面“踩坑笔记”
第二次点击Configure
一定要保持网络畅通,会需要从(国外的)网站下载资料,你也可以提前下载好。主要是这些data, ffmpeg, ippicv, xfeatures2d等文件,下载的东西存在.cache文件夹中。
【福利】我将其共享在百度云盘,地址如下:
大家可以去下载,解压后将其放在文件夹”Where is the source code”中即可。(我的是D:softwareOpenCVSourceCodeopencv-3.4.2)
检查CMake设置
Set QT_MAKE_EXECUTABLE to D:QtQt5.9.35.9.3mingw53_32binqmake.exe【这个我没有碰到,Qt官网上用的CMake3.7.2应该有用】
Set Qt5Concurrent_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5Concurrent
Set Qt5Core_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5Core
Set Qt5Gui_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5Gui
Set Qt5Test_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5Test
Set Qt5Widgets_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5Widgets
Set Qt5OpenGL_DIR to D:/Qt/Qt5.9.3/5.9.3/mingw53_32/lib/cmake/Qt5OpenGL
【以上几项CMake自动帮忙配置好了,可以稍微检查下】
Set CMAKE_BUILD_TYPE to Release or RelWithDebInfo【我选的Release,生成release版;需要debug版的选debug】
第三次点击Configure
Generate
确保没有红色背景了再点击Generate,出现“Generating done”,如下图
控制台编译
切换到控制台,输入以下指令
C:Usersxxx>d:【切换到d盘,有冒号】
D:>cd D:/software/OpenCV/opencv342_Qt5.9【Where to build the binaries】
D:softwareOpenCVopencv342_Qt5.9>mingw32-make -j 8【加速编译】
Qt官网说明:
To speed up the compile, the -j flag can be used to run multiple compile jobs simultaneously. On an 8 core CPU, you can set it to 8 or higher, so all cores are used. On a core i7-3770@3.4GHz with 8GB ram, the compile takes about 6 minutes.
笔者说明:
-j是指jobs,即同时编译8份jobs,意思是开8个线程同时编译,你也可以设置为4,也可以不带这个参数。
我的电脑编译普通版OpenCV只用了不到七分钟,Contrib版是半小时左右。
如果有错误,请参考“踩坑笔记”去解决,解决完再重新下这个指令。
D:softwareOpenCVopencv342_Qt5.9>mingw32-make install【最后一步,生成install文件夹】
生成的内容在install文件夹中。各个细项的解释请参考
https://blog.csdn.net/yl_best/article/details/89152860#3.%20%E7%94%9F%E6%88%90%E7%9A%84%E7%BB%93%E6%9E%9C
Contrib配置
在这个选项填入Contrib的位置【精确到modules文件夹】
OPENCV_EXTRA_MODULES_PATH:D:/software/OpenCV/SourceCode/opencv_contrib-3.4.2/modules
第四次点击Configure
会出现很多红色背景的选项,
取消选中BUILD_opencv_hdf【深度学习中的一种文件格式】
勾选OPENCV_ENABLE_NON_FREE选项。【专利算法模块,包含特征检测和GPU相关的内容】
其他的不用配置了,
第五次点击Configure,出现全白色的画面,如下
再点击Generate
剩下步骤同“控制台编译”
踩坑笔记
Issue#0:ffmpeg下载问题:Couldn't connect to server/Timeout
错误信息如下:
FFMPEG: Download: opencv_ffmpeg.dll
=======================================================================
Couldn't connect to server from the Internet.
Perhaps direct connections are not allowed in the current network.
To use proxy please check/specify these environment variables:
- http_proxy/https_proxy
- and/or HTTP_PROXY/HTTPS_PROXY
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
FFMPEG: Download failed: 7;"Couldn't connect to server"
For details please refer to the download log file:
D:/software/OpenCV/opencv400_Qt5.9/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:200 (download_win_ffmpeg)
CMakeLists.txt:636 (include)
解决办法:除非各位的环境和版本与我的一样,用同样的.cache文件,否则会出现这个问题mismatch_md5;这时应该去D:/software/OpenCV/opencv400_Qt5.9/CMakeDownloadLog.txt文件中查找对应的下载地址,提前下载好所需要的.dll
例如我编译OpenCV4.0时的地址是这个
https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll
opencv_ffmpeg.dll下载完成之后,将其更改名字为849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll。
参考这句
#cmake_download "D:/software/OpenCV/SourceCode/opencv-4.0.0/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
这些log文件中都有,大家耐心点看就可以发现。
opencv_ffmpeg_64.dll, ffmpeg_version.cmake及其他下载问题都是同样的解决办法。
Issue#1:勾选ENABLE_CXX11
error: 'nullptr' was not declared in this scope
return s == nullptr || *s == 0;
解决办法:在CMake GUI上选中ENABLE_CXX11,重新Configure->Generate
Issue#3:取消勾选"WITH_MSMF"
D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_msmf.cpp:148:29: error: using invalid field '{anonymous}::ComPtr<T>::p'
解决办法:取消选中"WITH_MSMF",如下图所示: 重新点击Configure->Generate
Issue#2:在cap_dshow.cpp的文件中加宏定义“#define NO_DSHOW_STRSAFE”
D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_dshow.cpp: In member function 'void videoInput::getMediaSubtypeAsString(GUID, char*)':
D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_dshow.cpp:2184:41: error: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope
if( type == MEDIASUBTYPE_RGB24) sprintf(tmpStr, "RGB24");
解决办法:修改“D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_dshow.cpp”的文件,在#include "cap_dshow.hpp"前加宏定义“#define NO_DSHOW_STRSAFE”,如下图所示:
Issue#3:取消勾选"WITH_MSMF"
D:softwareOpenCVSourceCodeopencv-3.4.2modulesvideoiosrccap_msmf.cpp:148:29: error: using invalid field '{anonymous}::ComPtr<T>::p'
解决办法:取消选中"WITH_MSMF",如下图所示: 重新点击Configure->Generate
Issue#4:取消勾选BUILD_opencv_hdf
【OpenCV3.4.2错误信息】
In file included from C:/anaconda3/Library/include/hdf5.h:22:0,
from D:softwareOpenCVSourceCodeopencv_contrib-3.4.2moduleshdfsrchdf5.cpp:37:
C:/anaconda3/Library/include/H5public.h:156:19: error: conflicting declaration 'typedef long long int ssize_t'
typedef long long ssize_t;
modulesworldCMakeFilesopencv_world.dirbuild.make:1394: recipe for target 'modules/world/CMakeFiles/opencv_world.dir/D_/software/OpenCV/SourceCode/opencv_contrib-3.4.2/modules/hdf/src/hdf5.cpp.obj' failed
mingw32-make[2]: *** [modules/world/CMakeFiles/opencv_world.dir/D_/software/OpenCV/SourceCode/opencv_contrib-3.4.2/modules/hdf/src/hdf5.cpp.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
【OpenCV4.0.1错误信息】
C:/anaconda3/Library/include/H5public.h:156:19: error: conflicting declaration 'typedef long long int ssize_t'
typedef long long ssize_t;
CV_Error_(Error::StsInternal, ("Unknown H5Type: %lld.", (long long)h5Type));
moduleshdfCMakeFilesopencv_hdf.dirbuild.make:62: recipe for target 'modules/hdf/CMakeFiles/opencv_hdf.dir/src/hdf5.cpp.obj' failed
mingw32-make[2]: *** [modules/hdf/CMakeFiles/opencv_hdf.dir/src/hdf5.cpp.obj] Error 1
CMakeFilesMakefile2:3205: recipe for target 'modules/hdf/CMakeFiles/opencv_hdf.dir/all' failed
mingw32-make[1]: *** [modules/hdf/CMakeFiles/opencv_hdf.dir/all] Error 2
mingw32-make[1]: *** Waiting for unfinished jobs....
解决办法:H5Type深度学习中的一种文件格式,取消勾选BUILD_opencv_hdf
Issue#5:取消勾选BUILD_opencv_world
错误信息:
collect2.exe: error: ld returned 1 exit status
modulesworldCMakeFilesopencv_world.dirbuild.make:11665: recipe for target 'bin/libopencv_world342.dll' failed
解决办法:取消勾选BUILD_opencv_world。编译带Contrib版的OpenCV3.4.2遇到的,不能勾选;普通版OpenCV3.4.2是没有这个问题的,可以勾选这个选项,成功build;OpenCV4.0都没有成功,取消勾选
编译带Contrib版的OpenCV3.4.2 world错误信息如下:
CMakeFilesopencv_world.dir/objects.a(translationsmatchview.cpp.obj):translationsmatchview.cpp:(.text$_ZN3cvv4view20TranslationMatchViewC2ESt6vectorIN2cv8KeyPointESaIS4_EES6_S2_INS3_6DMatchESaIS7_EENS3_3MatESA_bP7QWidget+0x1492): undefined reference to `vtable for cvv::view::MatchView'
collect2.exe: error: ld returned 1 exit status
modulesworldCMakeFilesopencv_world.dirbuild.make:11665: recipe for target 'bin/libopencv_world342.dll' failed
mingw32-make[2]: *** [bin/libopencv_world342.dll] Error 1
CMakeFilesMakefile2:4583: recipe for target 'modules/world/CMakeFiles/opencv_world.dir/all' failed
各位朋友如果有编译成功的,还请留言告知,谢谢。
在这个网站上找到的答案说下载最新版OpenCV和Contrib(提问人用的是opencv 3.1)
http://answers.opencv.org/question/94347/error-in-building-cvv-module-of-contrib/
目前还是无解,只能先取消勾选BUILD_opencv_world,不过Visual Studio下有编译成功。
大家有编译成功的还请告知,谢谢。
Issue#6:取消勾选"ENABLE_PRECOMPILED_HEADERS"
error : ... windres.exe: unknown option -- W ...【我用CMake3.12.1版没有碰到,不过Qt官网有提(用的是3.7.2),估计是旧版CMake会有碰到,我先放上来了】
解决办法:取消选中"ENABLE_PRECOMPILED_HEADERS",如下图所示: 重新点击Configure->Generate
Issue#7:Python3版编译失败
第一种情况:Python2版成功,Python3版失败
[100%] Linking CXX shared module ....libpython3cv2.cp36-win_amd64.pyd
C:/anaconda3/python36.dll: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
modulespython3CMakeFilesopencv_python3.dirbuild.make:103: recipe for target 'lib/python3/cv2.cp36-win_amd64.pyd' failed
mingw32-make[2]: *** [lib/python3/cv2.cp36-win_amd64.pyd] Error 1
CMakeFilesMakefile2:7663: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
解决办法:
我暂时用不到,就先取消选中 Build_opencv_python3,后面用到再重新configure。
猜测是不是安装了两个版本的Python: Python2.7.5 & Python3.6.7,有待验证。
如下为Configuring Done时信息:
Python 2:
Interpreter: C:/Python27/python.exe (ver 2.7.5)
Libraries: optimized C:/Python27/libs/libpython27.a debug C:/Python27/libs/python27_d.lib (ver 2.7.5)
numpy: C:/Python27/lib/site-packages/numpy/core/include (ver 1.15.2)
packages path: C:/Python27/Lib/site-packages
Python 3:
Interpreter: C:/Python/Python36/python.exe (ver 3.6.7)
Libraries: C:/Python/Python36/python36.dll (ver 3.6.7)
numpy: C:/Python/Python36/lib/site-packages/numpy/core/include (ver 1.15.4)
packages path: C:/Python/Python36/Lib/site-packages
Python (for build): C:/Python27/python.exe
【更新】有两个版本的Python,但是CMake只选择了Python27版的python.exe,所以python3生成不了,
Python27我已经不需要使用,所以卸载Python27之后就变成如下了
第二种情况:只有Python3,仍然失败
Python 3:
Interpreter: C:/Python/Python36/python.exe (ver 3.6.7)
Libraries: C:/Python/Python36/python36.dll (ver 3.6.7)
numpy: C:/Python/Python36/lib/site-packages/numpy/core/include (ver 1.15.4)
packages path: C:/Python/Python36/Lib/site-packages
Python (for build): C:/Python/Python36/python.exe【有找到正确版本】
失败信息如下:
[100%] Linking CXX shared module ....libpython3cv2.cp36-win_amd64.pyd
C:/Python/Python36/python36.dll: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status
modulespython3CMakeFilesopencv_python3.dirbuild.make:103: recipe for target 'lib/python3/cv2.cp36-win_amd64.pyd' failed
mingw32-make[2]: *** [lib/python3/cv2.cp36-win_amd64.pyd] Error 1
CMakeFilesMakefile2:7663: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
mingw32-make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
mingw32-make[1]: *** Waiting for unfinished jobs....
目前还是无解,只能先取消勾选,大家如有知道的麻烦留言备注,谢谢。
Issue#8.取消勾选BUILD_opencv_gapi【OpenCV4.0.0有此问题,OpenCV4.0.1已经修复】
OpenCV4.0可以configure成功,但是Generate失败,错误信息如下:
CMake Error at modules/gapi/cmake/DownloadADE.cmake:28 (add_library):
No SOURCES given to target: ade
Call Stack (most recent call first):
modules/gapi/cmake/init.cmake:10 (include)
cmake/OpenCVModule.cmake:312 (include)
cmake/OpenCVModule.cmake:375 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
解决办法:在D:softwareOpenCVSourceCodeopencv-4.0.0modulesgapicmakeinit.cmake的开头添加
OCV_OPTION(WITH_ADE "Enable ADE framework (required for Graph API module)" ON)
if(NOT WITH_ADE)
return()
endif()
如下图:灰色背景为新增加的
然后保存,关闭档案,重启CMakeGUI重头开始【如果你提前按照这个步骤改好了就不用重启了】
参考链接
https://github.com/opencv/opencv/commit/de8696aa43826510d5fd2ba1563604a29ab18a9d
路径OpenCV4.0.1 opencv/modules/gapi/cmake/
扩展说明:
OpenCV4.0添加了全新的opencv_gapi模块(OpenCV3.4.2没有gapi这个module)。 它是非常有效的图像处理的引擎,基于处理图的lazy评估和动态构造(因此名称为Graph API或G-API)。 有关详细信息,请参见Graph API(G-API)
Issue#9 'FILTER_SCHARR' was not declared in this scope
错误信息:
D:softwareOpenCVSourceCodeopencv_contrib-4.0.0modulescvvsrcqtutilfiltersobelfilterwidget.cpp:136:11: error: 'FILTER_SCHARR' was not declared in this scope
解决方法:在对应的opencv_contrib-4.0.0modulescvvsrcqtutilfiltersobelfilterwidget.cpp文件中添加
using namespace cv;
参考https://github.com/opencv/opencv_contrib/issues/1914
【OpenCV4.0.1已经修复此问题】
Qt+OpenCV配置
新建Qt项目
新建一个Qt项目:
打开QtCreator-> File -> New File or project -> Application | Qt Widgets Application -> Choose,如下图
项目名:TestOpenCV
路径:F:Qt_Ex
点击Next,如下图
Kit Selection: 保持不变 -> 点击Next,如下图
Class Information: 保持不变 -> 点击Next,如下图
Qt + OpenCV配置
1. 添加环境变量【建议重启电脑】
我把Where to build the binaries(我的是D:/software/OpenCV/opencv342_Qt5.9)中生成的Install文件夹copy至另外一个文件夹中D:OpenCVopencv342Qt5.9_world,方便使用。
D:OpenCVopencv342Qt5.9_worldinstallx86mingwbin
2. 在TestOpenCV.pro文件中添加包含文件
INCLUDEPATH += D:OpenCVopencv342Qt5.9Contribinstallinclude
INCLUDEPATH += D:OpenCVopencv342Qt5.9Contribinstallincludeopencv
INCLUDEPATH += D:OpenCVopencv342Qt5.9Contribinstallincludeopencv2
【注意】所有路径不要全部copy我的,除非和我的一模一样;以你编译出来的文件为准
3.在TestOpenCV.pro文件中添加library
方法一:添加所有library【编译起来比方法二稍微慢点】
LIBS += -L D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_*.dll.a
方法二:只添加需要的library
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_core342.dll.a
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_highgui342.dll.a
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_imgcodecs342.dll.a
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_imgproc342.dll.a
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_features2d342.dll.a
LIBS += D:OpenCVopencv342Qt5.9Contribinstallx86mingwliblibopencv_calib3d342.dll.a
方法三:更加正确的做法【个人推荐,比较简洁】
1.新增环境变量【建议重启电脑】
OPENCV_SDK_DIR=D:OpenCVopencv342Qt5.9Contribinstall
如果有多个版本的可以这样写
OPENCV342_SDK_DIR=D:OpenCVopencv342Qt5.9Contribinstall
OPENCV401_SDK_DIR=D:OpenCVopencv401Qt5.9Contribinstall
2.在*.pro文件中添加包含文件
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include/opencv
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include/opencv2
3. 在*.pro文件中添加library
【注意】以下两种只要选择一种即可
# 只添加需要的library
LIBS += -L$$(OPENCV_SDK_DIR)/x86/mingw/lib
-lopencv_core342
-lopencv_highgui342
-lopencv_imgcodecs342
-lopencv_imgproc342
-lopencv_features2d342
-lopencv_calib3d342
# 添加所有library
LIBS += -L $$(OPENCV_SDK_DIR)/x86/mingw/lib/libopencv_*.a #import all libs
汇总如下代码,下次再有新项目直接copy就好
【注意】这个用的是方法三,按照步骤来就可以成功运行
#-------------------------------------------------
#
# Project created by QtCreator 2019-04-10T18:01:43
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TestOpenCV
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES +=
main.cpp
mainwindow.cpp
HEADERS +=
mainwindow.h
FORMS +=
mainwindow.ui
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include/opencv
INCLUDEPATH += $$(OPENCV_SDK_DIR)/include/opencv2
# import necessary libs
#LIBS += -L$$(OPENCV_SDK_DIR)/x86/mingw/lib
# -lopencv_core342
# -lopencv_highgui342
# -lopencv_imgcodecs342
# -lopencv_imgproc342
# -lopencv_features2d342
# -lopencv_calib3d342
#import all libs
LIBS += -L $$(OPENCV_SDK_DIR)/x86/mingw/lib/libopencv_*.a #import all libs
代码验证及效果图
代码1 - 简单验证普通版OpenCV
在mainwindow.cpp中书写如下代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// read an image
cv::Mat image = cv::imread("F:/images/lena.jpg", CV_WINDOW_AUTOSIZE);
// create image window named "My Image"
cv::namedWindow("My Image");
// show the image on window
cv::imshow("My Image", image);
}
MainWindow::~MainWindow()
{
delete ui;
}
代码1 - 效果图
【注意】有两个窗口
代码2 - 简单验证Contrib版OpenCV(使用SIFT特征比对)
在mainwindow.cpp中书写如下代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/utility.hpp>
#include <opencv2/video/tracking.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream>
#include <ctype.h>
//命名空间
using namespace cv;
using namespace std;
using namespace xfeatures2d;
/*
class SIFT : public Feature2D {
public:
static Ptr<SIFT> create (
int nfeatures = 0, // 最大特征数(0,则算法将返回可以找到的所有特征)
int nOctaveLayers = 3, // 每个Octave(图像金字塔中的图像)应该计算多少层(不同尺度的高斯卷积)
double contrastThreshold = 0.04, // 精细筛选的阈值(to filter out weak features)
double edgeThreshold = 10, // 精细筛选的阈值(to filter out "edge" features)
double sigma = 1.6 // 图像的预光滑处理
);
int descriptorSize() const; // descriptor size, always 128
int descriptorType() const; // descriptor type, always CV_32F
...
};
*/
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Mat srcImage, gray, draw;
//读入一张图片,载入图像
srcImage = imread("F:/images/lena.jpg"); //在程序中打开一张图片
if (!srcImage.data)
{
printf("could not load image...n");
}
char input_title[] = "input image";
char output_title[] = "sift image";
namedWindow(input_title, WINDOW_AUTOSIZE);
namedWindow(output_title, WINDOW_AUTOSIZE);
// 显示载入的图片
imshow(input_title, srcImage);
//转为灰度图
cvtColor(srcImage, gray, COLOR_BGR2GRAY);
Mat descriptors;
std::vector<KeyPoint> keypoints;
//生产sift结构
Ptr<SiftFeatureDetector> siftFD = SiftFeatureDetector::create();
siftFD->detectAndCompute(gray, Mat(), keypoints, draw);
drawKeypoints(gray, keypoints, gray, Scalar(0, 0, 255), DrawMatchesFlags::DEFAULT);
//显示效果图
imshow(output_title, gray);
}
MainWindow::~MainWindow()
{
delete ui;
}
代码2 - 效果图
有三个窗口
编译所需的.cache文件 - Qt5.9+VS2013/VS2015
啰嗦下,各位的环境与软件版本除非和我的一样可以直接下载使用,否则建议提前下载,因为会出现这个问题mismatch_md5。
OpenCV3.4.2:Qt5.9+VS2013用同一份
链接:https://pan.baidu.com/s/1JxjGO-rNcUNsp6qKtGmJ8g
提取码:rzwd
OpenCV4.0.1:VS2015
链接:https://pan.baidu.com/s/16taJ6zJ_-icGYbkZJVUyOw
提取码:9sfs
OpenCV4.0.1:Qt5.9
链接:https://pan.baidu.com/s/1KoilXgJHXawAF4YFJN6dXQ
提取码:r4ha
编译好的OpenCV版本链接 - Qt5.9+VS2013
说明:不带Contrib字样的就是普通版OpenCV,
带world字样的是编译成opencv_world.dll版本的。
下载下来的压缩包里有ReadMe.txt,上面有详细说明。
opencv342Qt5.9
链接:https://pan.baidu.com/s/1AYyPjIgKElXwcCL0_Nmr6w
提取码:hhh1
opencv342Qt5.9_world
链接:https://pan.baidu.com/s/1zIg-8V_7FoVYDExh_IiAKw
提取码:xdi9
opencv342Qt5.9Contrib
链接:https://pan.baidu.com/s/1RfEPUWP7xAFC662F1DzK3w
提取码:7age
opencv342Vs2013_world
链接:https://pan.baidu.com/s/1qmiP2_0Wo3k08ZSZfisPog
提取码:ox3z
opencv342Vs2013Contrib
链接:https://pan.baidu.com/s/15tZtVy3_wJyBks17T2WwhQ
提取码:6n76
opencv342Vs2013Contrib_world
链接:https://pan.baidu.com/s/1CJdgYEipTrO0ICXbUDm5Og
提取码:65wq
opencv401Qt5.9Contrib
链接:https://pan.baidu.com/s/1cHuPgk4Zak8mPUHCPAaBkQ
提取码:ml82
OpenCV + Python版
https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
笔者说明:以下面这个为例,4.1.0是OpenCV_Python 4.1.0版,contrib是指带Contrib模块,
cp36指Python3.6版,win_amd64是指要安装的电脑64位Windows或AMD平台
win32就是指Windows 32位。
大家按需下载。
opencv_python‑4.1.0+contrib‑cp36‑cp36m‑win_amd64.whl
参考文章
https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows
最后
以上就是坚定饼干为你收集整理的OpenCV4.0.1/4.0.0/3.4.2 + Contrib + Qt5.9 + CMake3.12.1编译及踩坑笔记、Qt5+OpenCV配置、代码验证、效果图、福利彩蛋前言Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0Windows 10, OpenCV4.0.0, Qt5.9.3, CMake3.12.1, MinGW5.3.0OpenCV3.4.2 + Contrib3.4.2 + Qt5.9 + CMake3.1的全部内容,希望文章能够帮你解决OpenCV4.0.1/4.0.0/3.4.2 + Contrib + Qt5.9 + CMake3.12.1编译及踩坑笔记、Qt5+OpenCV配置、代码验证、效果图、福利彩蛋前言Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0Windows 10, OpenCV4.0.0, Qt5.9.3, CMake3.12.1, MinGW5.3.0OpenCV3.4.2 + Contrib3.4.2 + Qt5.9 + CMake3.1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复