文章目录
编译 OpenCV 时,FFmpeg 或 ippicv 等下载不成功的解决方案
测试使用的 OpenCV 及 extra modules 版本
-
Version control: 4.11.0-186-ge89e2fd7ea
-
Version control (extra): 4.11.0-18-gbdc05185
为什么会这样?
大部分情况是因为上网不科学。
可能下载不成功的文件

其中 share/opencv4/testdata
和 testdata
两个目录实为同一内容,share/opencv4/testdata
为 Linux 下的目录,testdata
为 Windows 下的目录。
解决方案
-
下载 提取码: 5286,解压并复制到
${OpenCV_BINARY_DIR}
目录。假定${OpenCV_BINARY_DIR}
为opencv_build
目录,则复制完成之后的目录结构应该与上图保持一致。下载链接中的内容均来自
OpenCV
中提供的链接。 -
清除缓存
缓存所在的路径可以查看
${OpenCV_BINARY_DIR}/CMakeDownloadLog.txt
文件的第一行。 -
修改
CMake
文件例如:
结合实际需要进行注释,原则就是屏蔽CMake
下载,因为在上面复制的文件中已经包含了这些文件。 -
CMake
重新Configure
如果还是出现下载失败的情况,可以进行如下尝试:
- 重新清除缓存之后再
Configure
- 确认下载失败的文件是否包含在 提取码: 5286 中
- 重新清除缓存之后再
📢 如果你觉得这篇文章对你有帮助,欢迎关注我,获取更多优质内容!
💡 关注 + 收藏 + 评论,让我们一起进步!🚀
以下是历史部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是历史部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是历史部分,请根据自己使用的 OpenCV 版本酌情参考。
测试使用的 OpenCV 版本
需要用到的文件:链接: 提取码: 5286
不能成功下载的其它文件
如果有使用 opencv_contrib
可能会出现某些文件下载不成功的问题,目前发现的有以下格式的文件:
- wechat_qrcode 模块
- detect.caffemodel
- detect.prototxt
- sr.caffemodel
- sr.prototxt
- xfeatures2d 模块
- boostdesc_*
- vgg_generated_*
- face 模块
- face_landmark_model.dat
这个问题很好解决,如果能够看懂 ${OpenCV_BINARY_DIR}/CMakeDownloadLog.txt
中的内容,可以根据里面的内容进行操作。看不懂的话就直接复制上面链接中下载下来的 opencv
文件夹到 ${OpenCV_BINARY_DIR}
即可。
不能成功下载 FFmpeg 或 IPPICV
当前的 OpenCV
版本在 CMake 中 Configure 的时候虽然不会再阻塞在下载部分,也不会再导致项目不能生成,但 CMake 还是会提示这两个库没有成功下载,这个需要自己在输出部分查看,如下图:
下面是解决步骤
首先前往GitHub下载相应的库。
链接:opencv/opencv_3rdparty
建议不要 clone 整个仓库,貌似比较大且慢。
具体用哪一分支可用根据 cmake 文件进行获取。
-
FFmpeg 对应的位置在
path to opencv/3rdparty/ffmpeg/ffmpeg.cmake
在第 1 行可以找到所需要下载的分支名,即 Binaries branch name: ffmpeg/master_20200908
在第 3 行可以找到对应提交记录的哈希值,即 6152e132572dfdaa32887eabeb7199bef49b14dc这里直接给出 GitHub 链接 ffmpeg/master_20200908 可以直接进行下载。也可以 clone 整个仓库后进行分支切换(不建议)
-
ippicv 对应的位置在
path to opencv/3rdparty/ippicv/ippicv.cmake
在第 26 行可以找到所需要下载的分支名(这里以 win64 为例)。可以通过
OPENCV_ICV_NAME
变量的定义 来获取,如:set(OPENCV_ICV_NAME “ippicv_2020_win_intel64_20191018_general.zip”),其中的时间为20191018
,那么选对应的分支即可。
在第 5 行可以找到对应提交记录的哈希值,即 a56b6ac6f030c312b2dce17430eef13aed9af274这里直接给出 GitHub 链接 ippicv/master_20191018 可以直接进行下载。也可以 clone 整个仓库后进行分支切换(不建议)
复制库文件
- 将
ffmpeg
目录中的ffmpeg_version.cmake
opencv_videoio_ffmpeg.dll
opencv_videoio_ffmpeg_64.dll
三项复制到${OpenCV_BINARY_DIR}\opencv\3rdparty\ffmpeg
目录下。 - 将
ippicv_win
文件夹复制到${OpenCV_BINARY_DIR}\opencv\3rdparty\ippicv
目录下,ippicv 目录可能不存在,自己创建即可。ippicv_win
根据系统不同,可能为其它的名称,都在前面步骤中下载的文件中,解压即可。
修改 cmake 文件
在 CMake 中重新 Configure 即可。
以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。
以下是原文部分,请根据自己使用的 OpenCV 版本酌情参考。
在自己编译OpenCV时,因为种种原因可能会导致FFmpeg或ippicv下载不成功的问题,可以通过手动配置来解决这类问题,当然也可以直接配置之后再编译。
在进行配置之前,首先前往GitHub下载相应的库。
链接打开之后页面内容大致如上图所示,图中圈出了ffmpeg和iipicv的不同版本,具体用哪一版就各取所需吧。明确版本之后点击相应的链接进入下载。
下载完成之后解压,位置不重要。
到此,准备完毕。
FFmpeg的配置
-
将*“…\opencv_3rdparty-ffmpeg-master_20160715\ffmpeg”* 目录中的 ffmpeg_version.cmake、opencv_ffmpeg.dll、opencv_ffmpeg_64.dll 三项复制到 “path to your OpenCV\opencv\sources\3rdparty\ffmpeg” 目录下。
将上图中的三项复制到下图的目录中
-
编辑 ffmpeg.cmake
在 “path to your OpenCV\opencv\sources\3rdparty\ffmpeg” 中打开文件 ffmpeg.cmake ,将其内容修改为:
message(STATUS "FFMPEG: Package successfully downloaded")
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
保存内容。
到此,ffmpeg配置完毕。
ippicv的配置
-
在前面下载解压的目录*“…\opencv_3rdparty-ippicv-master_20151201\ippicv”* 中将ippicv_windows_20151201.zip 解压到当前目录。
在 “path to your OpenCV \opencv\sources\3rdparty\ippicv” 中创建文件夹unpack,将解压得到的ippicv_win 复制到新创建的unpack 中。
-
编辑 downloader.cmake
将downloader.cmake 的内容修改为:
#
# The script downloads ICV package
#
# On return this will define:
# OPENCV_ICV_PATH - path to unpacked downloaded package
#
function(_icv_downloader)
# Commit SHA in the opencv_3rdparty repo
set(IPPICV_BINARIES_COMMIT "81a676001ca8075ada498583e4166079e5744668")
# Define actual ICV versions
if(APPLE)
set(OPENCV_ICV_PACKAGE_NAME "ippicv_macosx_20151201.tgz")
set(OPENCV_ICV_PACKAGE_HASH "4ff1fde9a7cfdfe7250bfcd8334e0f2f")
set(OPENCV_ICV_PLATFORM "macosx")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_osx")
elseif(UNIX)
if(ANDROID AND NOT (ANDROID_ABI STREQUAL x86 OR ANDROID_ABI STREQUAL x86_64))
return()
endif()
set(OPENCV_ICV_PACKAGE_NAME "ippicv_linux_20151201.tgz")
set(OPENCV_ICV_PACKAGE_HASH "808b791a6eac9ed78d32a7666804320e")
set(OPENCV_ICV_PLATFORM "linux")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_lnx")
elseif(WIN32 AND NOT ARM)
set(OPENCV_ICV_PACKAGE_NAME "ippicv_windows_20151201.zip")
set(OPENCV_ICV_PACKAGE_HASH "04e81ce5d0e329c3fbc606ae32cad44d")
set(OPENCV_ICV_PLATFORM "windows")
set(OPENCV_ICV_PACKAGE_SUBDIR "/ippicv_win")
else()
return() # Not supported
endif()
set(OPENCV_ICV_UNPACK_PATH "${CMAKE_CURRENT_LIST_DIR}/unpack")
set(OPENCV_ICV_PATH "${OPENCV_ICV_UNPACK_PATH}${OPENCV_ICV_PACKAGE_SUBDIR}")
message(STATUS "ICV: Package successfully downloaded")
set(OPENCV_ICV_PATH "${OPENCV_ICV_PATH}" PARENT_SCOPE)
endfunction()
_icv_downloader()
保存内容。
到此,ippicv配置完毕。
开始快乐的编译OpenCV吧!