opencv3414contrib编译教程及FFMPEG/IPPICV/XFeatures2D/Face_landmark_model.dat下载失败解决办法及其文件共享(百度网盘)

本文详述了如何编译OpenCV 3.4.14及其contrib模块,包括下载源码、配置CMake、解决FFMPEG、IPPICV等第三方库下载失败的问题,以及手动下载并替换缓存文件的过程。此外,还介绍了如何配置VS2019项目以使用编译好的OpenCV库,并提供了环境变量配置和项目属性设置的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.cache相关下载文件共享

仅限于opencv3414contrib的windows版本

链接, 提取码:1228
主要包含(已全部弄好,可直接替换opencv\source\.cache文件夹)

链接,提取码1228, 

主要包含(需逐个解压且md5-原名格式重命名到cache文件夹)

前言

官网上可以下到编译好的库,为什么还要自己编译呢?
        原因之一:项目架构的改变是OpenCV3最大的革新之处,抛弃了整体架构,使用内核+插件的架构形式。官网上提供的编译好的库只包含其核心模块,并不包含OpenCV_contrib中的扩展模块。
        原因之二:我们可以对其源代码进行修改,重新编译后为自己所用。

源文件是函数的实现,库文件只是函数的接口,官方只提供了部分标准接口

使用opencv需要编译源码,得到库文件。可以用cmake构建项目后编译,也可以直接用官方提供的编译好的版本。
官方提供的编译库一般只是标准版本,可能与某些库并不兼容,比如官方提供的编译好的版本与opengl就不兼容,这时就只能自己构建项目后编译。
在用cmake生成工程文件的时候,设置当中有WITH_OPENGL,WITH_QT等选项,你想支持哪个库只需要选择即可。

opencv3.4.1安装路径及vs2017相关配置 文章中提到了opencv_world341d.lib和opencv_world341.lib,其中341d的意思是3.4.1的debug的lib,而341是realease的lib

vs2019专业版, opencv4.3.0

嫌麻烦的,就创建个txt文件,修改成.props文件键入如下代码保存,打开新项目时,直接从属性管理的debug这个文件就行了, 就是属性配置,注意我的4.3.0的配置路径

(这就是个xml格式)

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>C:\opencv4.3.0\opencv\newbuild\install\include;C:\opencv4.3.0\opencv\newbuild\install\include\opencv2;$(IncludePath)</IncludePath>
    <LibraryPath>C:\opencv4.3.0\opencv\newbuild\install\x64\vc16\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <Link>
      <AdditionalDependencies>opencv_aruco430d.lib;opencv_bgsegm430d.lib;opencv_bioinspired430d.lib;opencv_calib3d430d.lib;opencv_ccalib430d.lib;opencv_core430d.lib;opencv_datasets430d.lib;opencv_dnn430d.lib;opencv_dnn_objdetect430d.lib;opencv_dnn_superres430d.lib;opencv_dpm430d.lib;opencv_face430d.lib;opencv_features2d430d.lib;opencv_flann430d.lib;opencv_fuzzy430d.lib;opencv_gapi430d.lib;opencv_hfs430d.lib;opencv_highgui430d.lib;opencv_imgcodecs430d.lib;opencv_imgproc430d.lib;opencv_img_hash430d.lib;opencv_intensity_transform430d.lib;opencv_line_descriptor430d.lib;opencv_ml430d.lib;opencv_objdetect430d.lib;opencv_optflow430d.lib;opencv_phase_unwrapping430d.lib;opencv_photo430d.lib;opencv_plot430d.lib;opencv_quality430d.lib;opencv_rapid430d.lib;opencv_reg430d.lib;opencv_rgbd430d.lib;opencv_saliency430d.lib;opencv_shape430d.lib;opencv_stereo430d.lib;opencv_structured_light430d.lib;opencv_superres430d.lib;opencv_surface_matching430d.lib;opencv_text430d.lib;opencv_tracking430d.lib;opencv_video430d.lib;opencv_videoio430d.lib;opencv_videostab430d.lib;opencv_ximgproc430d.lib;opencv_xobjdetect430d.lib;opencv_xphoto430d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

准备工具

vs2019专业版(需要安装时选择扩展开发),cmake, opencv4.3.0及其contrib

安装cmake

官方网址下载 cmake 选择版本 cmake-3.13.2-win64-x64.msi 

下载cmake

下载opencv和opencv_contrib

下载需要的opencv版本

选择对应的版本下载contrib,

下载对应版本

cmake编译⭐️(重点)

打开CMake,下图

第一个红框输入Opencv(我的是opencv4.0.1)的sources目录(不是opencv_contrib的目录,原来自己opencv的目录);

第二个红框输入你自定义的输出目录。最后点左下角的Configure

注意自定义的输出目录

点击完 Configure后会出现下图提示,点击确认后就ok了

然后选择对应vs的版本,64位系统选择Win64,默认的是Win32。

需要在第二个选项中 选择x64, 否则会默认32位, 下图是老版本, 没有显示第二个选项

选择64
选择Finish
等待

红色说明有一些文件没有下载成功!!!!

CMake出现红色/相关文件下载失败问题 

在解决这个问题之前,首先对3个目录进行说明,不然下边很容易搞混, 关于opencv中各个文件夹的详细概述,应参考❌这个笔记,这里只做简要概述:

1⃣️目录下存放的是源文件,包含了各种函数的实现方法

C:\opencv\sources        //存放opencv的源文件

2⃣️该目录下是opencv的第三方文件

C:\opencv\sources\3rdparty

3⃣️这个存放的是编译时的缓存文件,主要是根据2⃣️中的.cmake文件 包含的链接下载的文件,如ffmpeg.cmake见下图:

C:\opencv\sources\.cache

 

 ⚠️ 需要下载的"....\3rdparty"中的文件,其命名方式为  MD5-文件原名

FFMPEG文件无法下载问题 

为什么一定要下载FFMPEG:

ffmpeg的功能:

(1)视频采集,(2)视频格式转换,(3)视频截取,(4)视频添加水印

开始分析原因

问题是opencv\sources\.cache中的这几个文件都经常会下载失败,以ffmpeg和ippicv为主要例子,进行讲解

1⃣️ffmpeg和ippicv均下载失败

下图是失败的部分代码展示, 我是FFMPEG和IPPICV等都下载失败了, 失败的提示代码如下:

CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
  IPPICV: Download failed: 35;"SSL connect error"//下载失败
  For details please refer to the download log file://告诉我去这个txt文件中查看日志

  C:/opencv/newBuild/CMakeDownloadLog.txt

FFMPEG, IPPICV下载失败

 2⃣️查看下载日志

去CMake编译输出目录(我自定义的名字是: newBuild)查看下载日志

在C:\opencv\newBuild\CMakeDownloadLog.txt

CMakeDownloadLog.txt内容如下

分析日志内容(分析过程可以跳过,直接跳过该代码块)

#use_cache "C:/opencv/sources/.cache"
#do_copy "opencv_ffmpeg.dll" "fad5ada9be36120bba8966709e7953a8" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/opencv_ffmpeg.dll" "C:/opencv/newBuild/3rdparty/ffmpeg"


/*意思是:
将"C:/opencv/sources/.cache"中的"opencv_ffmpeg.dll"文件 复制到"C:/opencv/newBuild/3rdparty/ffmpeg"
    其md5签名是"fad5ada9be36120bba8966709e7953a8" 
    下载链接是"https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/opencv_ffmpeg.dll" 
   
*/



#missing "C:/opencv/newBuild/3rdparty/ffmpeg/opencv_ffmpeg.dll"
/* 目录下没有这个文件 */ 

#check_md5 "C:/opencv/sources/.cache/ffmpeg/fad5ada9be36120bba8966709e7953a8-opencv_ffmpeg.dll"
/* 检查该文件的md5*/

#mismatch_md5 "C:/opencv/sources/.cache/ffmpeg/fad5ada9be36120bba8966709e7953a8-opencv_ffmpeg.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "C:/opencv/sources/.cache/ffmpeg/fad5ada9be36120bba8966709e7953a8-opencv_ffmpeg.dll"


#cmake_download "C:/opencv/sources/.cache/ffmpeg/fad5ada9be36120bba8966709e7953a8-opencv_ffmpeg.dll" 
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/opencv_ffmpeg.dll"
#try 1
# timeout on name lookup is not supported
#   Trying 185.199.108.133:443...
# connect to 185.199.108.133 port 443 failed: Timed out
#   Trying 185.199.110.133:443...
# connect to 185.199.110.133 port 443 failed: Timed out
#   Trying 185.199.111.133:443...
# Connected to raw.githubusercontent.com (185.199.111.133) port 443 (#0)
# schannel: ALPN, offering h2
# schannel: ALPN, offering http/1.1
# schannel: failed to receive handshake, SSL/TLS connection failed
# Closing connection 0

/*链接失败,下载失败*/

# schannel: shutting down SSL/TLS connection with raw.githubusercontent.com port 443
# Send failure: Connection was reset
# schannel: failed to send close msg: Failed sending data to the peer (bytes written: -1)
# 

#do_copy "opencv_ffmpeg_64.dll" "650e2272728491923e566f784f79cfef" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/opencv_ffmpeg_64.dll" "C:/opencv/newBuild/3rdparty/ffmpeg"
#missing "C:/opencv/newBuild/3rdparty/ffmpeg/opencv_ffmpeg_64.dll"
#check_md5 "C:/opencv/sources/.cache/ffmpeg/650e2272728491923e566f784f79cfef-opencv_ffmpeg_64.dll"
#mismatch_md5 "C:/opencv/sources/.cache/ffmpeg/650e2272728491923e566f784f79cfef-opencv_ffmpeg_64.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "C:/opencv/sources/.cache/ffmpeg/650e2272728491923e566f784f79cfef-opencv_ffmpeg_64.dll"
#cmake_download "C:/opencv/sources/.cache/ffmpeg/650e2272728491923e566f784f79cfef-opencv_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/opencv_ffmpeg_64.dll"
#try 1
# timeout on name lookup is not supported
#   Trying 185.199.108.133:443...
# connect to 185.199.108.133 port 443 failed: Timed out
#   Trying 185.199.110.133:443...
# connect to 185.199.110.133 port 443 failed: Timed out
#   Trying 185.199.111.133:443...
# connect to 185.199.111.133 port 443 failed: Timed out
#   Trying 185.199.109.133:443...
# connect to 185.199.109.133 port 443 failed: Timed out
# Failed to connect to raw.githubusercontent.com port 443: Timed out
# Closing connection 0
# 

#do_copy "ffmpeg_version.cmake" "3b90f67f4b429e77d3da36698cef700c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/ffmpeg_version.cmake" "C:/opencv/newBuild/3rdparty/ffmpeg"
#missing "C:/opencv/newBuild/3rdparty/ffmpeg/ffmpeg_version.cmake"
#check_md5 "C:/opencv/sources/.cache/ffmpeg/3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake"
#mismatch_md5 "C:/opencv/sources/.cache/ffmpeg/3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake" "d41d8cd98f00b204e9800998ecf8427e"
#delete "C:/opencv/sources/.cache/ffmpeg/3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake"
#cmake_download "C:/opencv/sources/.cache/ffmpeg/3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/e99214251d9f3cde7c48abd46b2259bddc9885b6/ffmpeg/ffmpeg_version.cmake"
#try 1
# timeout on name lookup is not supported
#   Trying 185.199.108.133:443...
# connect to 185.199.108.133 port 443 failed: Timed out
#   Trying 185.199.110.133:443...
# connect to 185.199.110.133 port 443 failed: Timed out
#   Trying 185.199.111.133:443...
# Connected to raw.githubusercontent.com (185.199.111.133) port 443 (#0)
# schannel: ALPN, offering h2
# schannel: ALPN, offering http/1.1
# schannel: failed to receive handshake, SSL/TLS connection failed
# Closing connection 0
# schannel: shutting down SSL/TLS connection with raw.githubusercontent.com port 443
# Send failure: Connection was reset
# schannel: failed to send close msg: Failed sending data to the peer (bytes written: -1)
# 

#do_unpack "ippicv_2020_win_intel64_20191018_general.zip" "879741a7946b814455eee6c6ffde2984" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip" "C:/opencv/newBuild/3rdparty/ippicv"

#check_md5 "C:/opencv/sources/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip"

#mismatch_md5 "C:/opencv/sources/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip" "d41d8cd98f00b204e9800998ecf8427e"

#delete "C:/opencv/sources/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip"

#cmake_download "C:/opencv/sources/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip"

#try 1
# timeout on name lookup is not supported
#   Trying 185.199.108.133:443...
# connect to 185.199.108.133 port 443 failed: Timed out
#   Trying 185.199.110.133:443...
# connect to 185.199.110.133 port 443 failed: Timed out
#   Trying 185.199.111.133:443...
# Connected to raw.githubusercontent.com (185.199.111.133) port 443 (#0)
# schannel: ALPN, offering h2
# schannel: ALPN, offering http/1.1
# schannel: failed to receive handshake, SSL/TLS connection failed
# Closing connection 0
# schannel: shutting down SSL/TLS connection with raw.githubusercontent.com port 443
# Send failure: Connection was reset
# schannel: failed to send close msg: Failed sending data to the peer (bytes written: -1)
# 

通过上述代码得到如下结论:

        1.本次下载失败的主要是 "C:\opencv\sources\3rdparty\"的一些文件的下载链接有问题,没有响应,

        2.主要是  ippicv_2020_win_intel64_20191018_general.zip
                        opencv_ffmpeg.dll
                        opencv_ffmpeg_64.dll
                        ffmpeg_version.cmake  这四个文件下载失败

3⃣️手动下载相关文件

"C:\opencv\sources\.cache" 这个目录正是存放下载缓存的地方,去核实一下上述四个文件的具体情况

显然.cache\ffmpeg中并没有什么文件,都是0KB的

"C:\opencv\sources\3rdparty\"这个目录下存放的是第三方的相关文件,根据上述4个下载失败的文件, 看一下对应的.cmake文件,

以ffmpeg为例:

ffmpeg.cmake文件如下

可以看到ffmpeg在opencv3414版本下的版本是3.4_20210302

而且还有对应的下载链接,点开后是无法链接的.

因此对缺失的文件,逐个手动下载

        从下方代码可以看到,ffmpeg中需要下载的正是

opencv_ffmpeg.dll   opencv_ffmpeg_64.dll   ffmpeg_version.cmake 

# Binaries branch name: ffmpeg/3.4_20210302
# Binaries were created for OpenCV: 2ab1f3f166fccc3a01497209cc01c5cea44ff201
ocv_update(FFMPEG_BINARIES_COMMIT "e99214251d9f3cde7c48abd46b2259bddc9885b6")
ocv_update(FFMPEG_FILE_HASH_BIN32 "fad5ada9be36120bba8966709e7953a8")
ocv_update(FFMPEG_FILE_HASH_BIN64 "650e2272728491923e566f784f79cfef")
ocv_update(FFMPEG_FILE_HASH_CMAKE "3b90f67f4b429e77d3da36698cef700c")

function(download_win_ffmpeg script_var)
  set(${script_var} "" PARENT_SCOPE)

  set(ids BIN32 BIN64 CMAKE)
  set(name_BIN32 "opencv_ffmpeg.dll")
  set(name_BIN64 "opencv_ffmpeg_64.dll")
  set(name_CMAKE "ffmpeg_version.cmake")

  set(FFMPEG_DOWNLOAD_DIR "${OpenCV_BINARY_DIR}/3rdparty/ffmpeg")

  set(status TRUE)
  foreach(id ${ids})
    ocv_download(FILENAME ${name_${id}}
               HASH ${FFMPEG_FILE_HASH_${id}}
               URL
                 "$ENV{OPENCV_FFMPEG_URL}"
                 "${OPENCV_FFMPEG_URL}"
                 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/"
               DESTINATION_DIR ${FFMPEG_DOWNLOAD_DIR}
               ID FFMPEG
               RELATIVE_URL
               STATUS res)
    if(NOT res)
      set(status FALSE)
    endif()
  endforeach()
  if(status)
    set(${script_var} "${FFMPEG_DOWNLOAD_DIR}/ffmpeg_version.cmake" PARENT_SCOPE)
  endif()
endfunction()

if(OPENCV_INSTALL_FFMPEG_DOWNLOAD_SCRIPT)
  configure_file("${CMAKE_CURRENT_LIST_DIR}/ffmpeg-download.ps1.in" "${CMAKE_BINARY_DIR}/win-install/ffmpeg-download.ps1" @ONLY)
  install(FILES "${CMAKE_BINARY_DIR}/win-install/ffmpeg-download.ps1" DESTINATION "." COMPONENT libs)
endif()

ocv_install_3rdparty_licenses(ffmpeg license.txt readme.txt)

下载ffmpeg文件

ffmpeg.cmake文件的链接已失效;

手动去opencv/opencv_3rdparty中,查找对应版本的ffmpeg,上述是3.4_20210302

下载该代码包,其包含了ffmpeg缺失的相关文件全部.

        别忘了,在ffmpeg.cmake中写的很清楚了, 需要的下载(但未下载成功)的是opencv_ffmpeg.dll   opencv_ffmpeg_64.dll   ffmpeg_version.cmake 

查看MD5,切换到下载的文件夹中,输入如下代码:

cd /d D:\opencv\sources\.cache\ffmpeg
certutil -hashfile ffmpeg_version.cmake MD5

修改文件名格式为MD5-原名

将手动下载且已修改好名字的文件, 放到.cache文件夹中(理解为:假装CMake下载好了,或者帮助CMake下载好了)

将上述下载的ffmpeg相关3个文件拷贝到:/opencv/sources/.cache中。

打开cmd,输入编译命令获取各个文件的MD5。

当MD5相同时,用已下载的dll替换对应大小为0KB的dll文件,注意修改文件名,其格式是:MD5-文件名

替换到.cache\ffmpeg中

其他的下载失败的文件的处理方法,步骤一样,不再赘述!

IPPICV文件的MD5不一致问题

在上述方法中,IPPICV总是无法下载,原因在于 ippicv.cmake文件中MD5有问题,我手动下载的文件经过多次检查均无问题

进入ippicv.cmake,并打开github对应网站,点击ippicv后的"UpdateIPPICV...."进入新网页,看到网页地址部分的信息和ippicv.cmake的IPPICV_COMMIT一致,说明下载的版本是对的.

不知道问题在哪里,我直接将我下载的ippicv_2020_win_intel64_20191018_general.zip 改了个名字放到.cache中了

将下载好的 ippicv_2020_win_intel64_20191018_general.zip 改名后放到了.cache\ippicv中了

xfeatures2d下载失败解决方法

data和xfeatures2d往往是在下一步报错,写在这里可以提前准备好,

用同样的方法,去.cache文件夹里,把所有0KB的文件,下载并重命名到cache文件夹中

其中data比较特殊,见下文. xfeatures2d的下载链接和信息在:

C:\opencvContri3.4.14\opencv_contrib-3.4.14\modules\xfeatures2d\cmake

data/face_landmark_model.dat下载失败解决方法

从下图可以看出来,data内需要下载的文件信息在

"C:/opencvContri3.4.14/opencv_contrib-3.4.14/modules/face/CMakeLists.txt"

进入这个文件查看一下,发现

但是,这里有错误!!!! face_landmark_model.dat已经不在上图右边的"https://raw.githubusercontent.com/opencv/opencv_3rdparty/"目录下了,而且raw.githubusercontent.com一般是打不开的,需要去"github/opencv/opencv_3rdparty/"中去找,

发现face_landmark_model.dat的位置如下图:

 在contrib_face_alignment_20170818将其打包下载,按照上述的步骤添加到cache中即可.

 

上述错误处理结束后,清空CMake的输出文件夹内容,我的是C:\opencv\newBuild, 并删除CMake当前cache,重新进行编译,如下图

 

然后再按一次Configure,红色消失

OK,且均下载成功/ 没有添加opencv_contrib时

继续编译 ,生成库文件

完成上述后找到OPENCV_EXTRA_MODULES_RATH一项,添加你刚刚解压的opencv_contrib中的modules目录,其中要把OPENCV_ENABLE_NONFREE(下图红框上面一行)选上,最后点击Generate开始编译

Generate

完成后左下角显示Configuring doneGenerating done

完成

 完成之后如果在你的输出文件夹中找到OpenCV.sln文件,即表明编译成功完成。

确认文件生成OpenCV.sln

看到下载日志也是OK

添加了opencv_contrib时

使用vs重新编译项目

使用VS打开刚刚的“OpenCV.sln”文件,如图所示点击“生成—>重新生成解决方案”,这得等一段时间 

打开上述OpenCV.sln文件

完成

“解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL(B)”然后又是等好一会儿 

重新编译INSTALL
完成

最后到自定义的文件夹确认一下,找到install文件夹,进去查看里面的内容(如下图,注:对于后边配置环境,install文件夹作用就像配置opencv4.0时的build文件夹一样):

环境配置

右键电脑【属性】
【高级系统设置】
【环境变量】
【系统变量】【Path】
编译目录“ D:\opencv4.0.1\opencv\CMAKE_opencv4.0.1_vs2017_x64\install\x64\vc15\bin” 的完整路径 (如下图),根据你自己Cmake时的路径进行修改。 
环境变量配置好后,一定要重启系统!!!!
 

配置相关目录

打开VS2017新建一个空项目 

如果之前配置过opencv,那么需要将之前的配置删除,恢复成如下图所示:

先将Debug的X86改成X64

选择64

打开刚才建好的属性表 

双击属性表,在通用属性—>VC++目录—>包含目录中添加:
D:\opencv4.0.1\opencv\CMAKE_opencv4.0.1_vs2017_x64\install\include

D:\opencv4.0.1\opencv\CMAKE_opencv4.0.1_vs2017_x64\install\include\opencv2

根据你的路径进行修改

没有了以前的“…opencv4.0\build\include\opencv”这一条。

然后是添加lib目录,在通用属性—>VC++目录—>库目录中添加: 

通用属性—>链接器—>输入—>附加的依赖项中添加:(版本不同替换401即可,另外还可以自己尝试用python或cpp生成一个包含如下lib名字的txt文件

这些lib在opencv4.0.1\opencv\CMAKE_opencv4.0.1_vs2017_x64\install\x64\vc15\lib   (就是上边CMake输出那个文件夹中的)

opencv_aruco401d.lib
opencv_bgsegm401d.lib
opencv_bioinspired401d.lib
opencv_calib3d401d.lib
opencv_ccalib401d.lib
opencv_core401d.lib
opencv_datasets401d.lib
opencv_dnn401d.lib
opencv_dnn_objdetect401d.lib
opencv_dpm401d.lib
opencv_face401d.lib
opencv_features2d401d.lib
opencv_flann401d.lib
opencv_fuzzy401d.lib
opencv_gapi401d.lib
opencv_hdf401d.lib
opencv_hfs401d.lib
opencv_highgui401d.lib
opencv_imgcodecs401d.lib
opencv_imgproc401d.lib
opencv_img_hash401d.lib
opencv_line_descriptor401d.lib
opencv_ml401d.lib
opencv_objdetect401d.lib
opencv_optflow401d.lib
opencv_phase_unwrapping401d.lib
opencv_photo401d.lib
opencv_plot401d.lib
opencv_reg401d.lib
opencv_rgbd401d.lib
opencv_saliency401d.lib
opencv_shape401d.lib
opencv_stereo401d.lib
opencv_stitching401d.lib
opencv_structured_light401d.lib
opencv_superres401d.lib
opencv_surface_matching401d.lib
opencv_text401d.lib
opencv_tracking401d.lib
opencv_video401d.lib
opencv_videoio401d.lib
opencv_videostab401d.lib
opencv_xfeatures2d401d.lib
opencv_ximgproc401d.lib
opencv_xobjdetect401d.lib
opencv_xphoto401d.lib
opencv_aruco401d.lib
opencv_bgsegm401d.lib
opencv_bioinspired401d.lib
opencv_calib3d401d.lib
opencv_ccalib401d.lib
opencv_core401d.lib
opencv_datasets401d.lib
opencv_dnn401d.lib
opencv_dnn_objdetect401d.lib
opencv_dpm401d.lib
opencv_face401d.lib
opencv_features2d401d.lib
opencv_flann401d.lib
opencv_fuzzy401d.lib
opencv_gapi401d.lib
opencv_hdf401d.lib
opencv_hfs401d.lib
opencv_highgui401d.lib
opencv_imgcodecs401d.lib
opencv_imgproc401d.lib
opencv_img_hash401d.lib
opencv_line_descriptor401d.lib
opencv_ml401d.lib
opencv_objdetect401d.lib
opencv_optflow401d.lib
opencv_phase_unwrapping401d.lib
opencv_photo401d.lib
opencv_plot401d.lib
opencv_reg401d.lib
opencv_rgbd401d.lib
opencv_saliency401d.lib
opencv_shape401d.lib
opencv_stereo401d.lib
opencv_stitching401d.lib
opencv_structured_light401d.lib
opencv_superres401d.lib
opencv_surface_matching401d.lib
opencv_text401d.lib
opencv_tracking401d.lib
opencv_video401d.lib
opencv_videoio401d.lib
opencv_videostab401d.lib
opencv_xfeatures2d401d.lib
opencv_ximgproc401d.lib
opencv_xobjdetect401d.lib
opencv_xphoto401d.lib

上述lib复制进来

代码读取所有文件名

#include <fstream>
#include <iostream>
#include <io.h>
#include <string>
#include <vector>
#include <cstdio>

void getFiles(const std::string& path, std::vector<std::string>& files);
using namespace std;

int main()
{
	vector<std::string> filenames;//用来存储文件名
	string path = "C:\\openCV\\opencv\\newBuild\\install\\x64\\vc15\\lib";
	getFiles(path, filenames);
	ofstream outfile("C:\\openCV\\opencv\\newBuild\\install\\x64\\vc15\\libs.txt");//写入txt文本中
	for (int i = 0; i < filenames.size(); i++)
	{
		if (filenames.size() > 0) {
			outfile << filenames[i] << endl;
			cout << "filenames is ok" << endl;
		}
	}
	system("pause");
	return 0;
}


void getFiles(const std::string& path, std::vector<std::string>& files)
{
	//文件句柄
	intptr_t hFile = 0;
	//文件信息,_finddata_t需要io.h头文件
	struct _finddata_t fileinfo;
	std::string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			//如果是目录,迭代之;如果不是,加入列表
			if ((fileinfo.attrib & _A_SUBDIR))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
				{
					getFiles(p.assign(path).append("\\").append(fileinfo.name),files);
				}
			}
			else
			{
				files.push_back(fileinfo.name);  //压入文件名
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

测试

#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char** argv) {
	Mat box = imread("1.jpg");
	Mat box_in_sence = imread("2.jpg");
 
	// 创建AKAZE
	auto akaze_detector = AKAZE::create();
	vector<KeyPoint> kpts_01, kpts_02;
	Mat descriptors1, descriptors2;
	akaze_detector->detectAndCompute(box, Mat(), kpts_01, descriptors1);
	akaze_detector->detectAndCompute(box_in_sence, Mat(), kpts_02, descriptors2);
 
	// 定义描述子匹配 - 暴力匹配
	Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::BRUTEFORCE);
	std::vector< DMatch > matches;
	matcher->match(descriptors1, descriptors2, matches);
 
	// 绘制匹配
	Mat img_matches;
	drawMatches(box, kpts_01, box_in_sence, kpts_02, matches, img_matches);
	imshow("AKAZE-Matches", img_matches);
	imwrite("D:/result.png", img_matches);
 
	waitKey(0);
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值