.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

下载opencv和opencv_contrib

cmake编译⭐️(重点)
打开CMake,下图
第一个红框输入Opencv(我的是opencv4.0.1)的sources目录(不是opencv_contrib的目录,原来自己opencv的目录);
第二个红框输入你自定义的输出目录。最后点左下角的Configure

点击完 Configure后会出现下图提示,点击确认后就ok了
然后选择对应vs的版本,64位系统选择Win64,默认的是Win32。
需要在第二个选项中 选择x64, 否则会默认32位, 下图是老版本, 没有显示第二个选项



红色说明有一些文件没有下载成功!!!!
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

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" 这个目录正是存放下载缓存的地方,去核实一下上述四个文件的具体情况

"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-文件名。

其他的下载失败的文件的处理方法,步骤一样,不再赘述!
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,红色消失

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

完成后左下角显示Configuring done,Generating done

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

看到下载日志也是OK

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


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


最后到自定义的文件夹确认一下,找到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

打开刚才建好的属性表
双击属性表,在通用属性—>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

代码读取所有文件名
#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;
}