开发环境: window10, opencv3.4.1,opencv-contrib, visual studio 2017,cmake3.11。
一开始下载了opencv并且解压,配置好vs2017,可以使用opencv的基本功能,后来发现如果要调用更丰富的opencv的API,要下载opencv-contribute,并且把opencv和opencv-contribute编译成二进制文件。
1. 下载好相应的软件,opencv的版本和contribute 的版本一定要一致。
opencv3.4.1: https://opencv.org/releases/page/2/
opencv-contrib: https://github.com/opencv/opencv_contrib/releases
cmake 工具:https://cmake.org/download/ 下载较新的版本,老版本编译可能出现问题。
2. opencv3.4.1,opencv-contrib直接解压缩就行,cmake工具安装是傻瓜式安装,直接点next就行。
3. 现在下载的opencv3.4.1 并没有编译成二进制,所以下一步使用cmake工具把opencv和opencv-contrib编译成二进制文件,cmake工具是windows下非常有用的编译工具,一般github下载下来的源码都是写一个cmakelist,不能用visualstudio 直接打开编译,所以要先用cmake编译,再转成visual studio下的工程,此时需要链接二进制的opencv,所以opencv要先编译成二进制。
opencv3.4.1 的文件夹中 source 文件夹, D:\Application for user\opencv\opencv341\opencv\sources
那个cmakelilst 就是告诉cmake 工具编译opencv的指令,打开cmake工具,
source code选择opencv的source 文件夹,where to build 自己新建一个文件夹放编译后的opencv, 可以自己取名字以及选择路径。
3. 点击configure,编译工具就是默认的vs2017,
一般会报错,因为编译时会下载3rd库,好像有些文件被墙了,下不下来,这时候就要手动下载,网站上提供了很多经验贴,但是我综合了各种办法才最后编译成功。
CMake Error at cmake/OpenCVUtils.cmake:895 (file):
file DOWNLOAD HASH mismatch
for file: [D:/OpenCV3.1/opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/opencv_ffmpeg.dll]
expected hash: [89c783eee1c47bfc733f08334ec2e31c]
actual hash: [3f05c9b2e6866360eedb35ff3dddff65]
status: [28;"Timeout was reached"]
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
CMake Error at cmake/OpenCVUtils.cmake:899 (message):
Failed to download opencv_ffmpeg.dll. Status=28;"Timeout was reached"
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
打开opencv的source文件夹,会发现.cahe文件夹,没下载成功的3rd库文件都会保存在那
点开,一般都是这两个库,ffmpeg和ippcv两个库下不下来,点进去
如果是0kb说明下载失败,这个截图时我之后编译成功截图的。所以要去手动下载opencv_ffmpeg_64.dll, ffmpeg_version.cmake, opencv_ffmpeg.dll 和ffmpeg_64.dll, 前面那一串 叫MD码:0dc72775ec3c14d1e049f51dc1280dbb,网上下载的这些库文件没有md码,但是你替换.cahe里相应的时要重命名加上那些对应的md码,
那些文件的下载地址:
https://codeload.github.com/opencv/opencv_3rdparty/zip/ffmpeg/master_20170704
https://codeload.github.com/opencv/opencv_3rdparty/zip/ippicv/master_20170822
解压后那些提到的文件都在里面
找到对于的文件,加上md码再替换source里的对应文件就行了,到这一步,一般报错就少了一些,但是还是报错下不下来,这时候打开 你build 的文件见,那里有cmakeDowndLoadLog记录具体错误,不要怕一点读懂,就ok
忘记截图当时报错信息的日志了,当是那些很容易读懂,就是啥missing,一般时是fmpeg这些文件不见,这时候最重要的来了,那里会有具体路径,是在opencv的source/3rdparty, 这时按提示打开,创建文件夹,把上面链接下载的ffmpeg,ippcv的库按要求放进去,
网上的这步别人写的帖子写的千变万化,这时别看他们的经验,就按你的cmakeDowndLoadLog里记录的他哪里missing了文件,你就在那个他写的路径下创建文件夹,放进下载的对于文件,就行了。再configure一下,报错信息就i没了。
此时,再cmake那里勾选BUILD_opencv_world选项,然后是在OPENCV_EXTRA_MODULES_PATH选项中,填写opencv_contrib解压目录下的modules文件夹的路径,这样就把opencv_contrib编译进去了。
再configure就出现 done的提示,然后再点generate生成visualstudio 里的sln工程文件。
4. 这时就用visual studio了,到这步基本没啥问题了。
打开我们build之后的opencv, 找到那个openCV.sln,用vs打开。选择Debug x64, 生成解决方案
要耗点时间。
然后找到图上的istall,右键点仅用于此项目。然后等待一会儿就完成了。同意的操作再操作一遍Release X64平台。
5. 我们编译后的opencv二进制文件夹那里可以找到install 文件夹,
可以发现这个和一开始下载的没编译后的opencv 3.4.1文件夹一样,里面的具体东西都是编译过的,所以只有按之前配置第三方库重新配置下vs 的opencv库,就可以用编译过后的opencv了
大概就是把这些库,依赖项都在vs下配好。
opencv_calib3d341d.lib
opencv_core341d.lib
opencv_dnn341d.lib
opencv_features2d341d.lib
opencv_flann341d.lib
opencv_highgui341d.lib
opencv_imgcodecs341d.lib
opencv_imgproc341d.lib
opencv_ml341d.lib
opencv_objdetect341d.lib
opencv_photo341d.lib
opencv_shape341d.lib
opencv_stitching341d.lib
opencv_superres341d.lib
opencv_video341d.lib
opencv_videoio341d.lib
opencv_videostab341d.lib
opencv_world341d.lib