目的
为了研究利用sift、orb、surf等算法进行视觉特征检测,第一次配置折腾了四五天。
电脑环境
win10
opencv4.5.0
opencv contrib 4.5.0
cmake3.25.2
报错
问题1
OpenCV(3.4.3) Error: The function/feature is not implemented (This algorithm is patented and is excluded in this configu ration; Set OPENCV_ENABLE_NONFREE CMake option and rebui1d the 1ibrary) in cv::xfeatures2d::SIFT::create, file F:\opencv343\opencv\opencv_contrib-3.4.3\modules\xfeatures2d\src\sift.cpp, 1ine 1207
问题2
vs2019 opencv450 无法打开opencv_world3450.lib
问题3
解决方法
第一次安装的版本是vs2019+opencv3.4.3+opencv contrib 3.4.3+cmake
结果就是上图中的问题1和问题3
参考这个文献,发现是cmake过程有问题
opencv+opencv_contrib+VS2019环境搭建中的许多坑
主要是通过这个现象发现配置存在问题:
- 编译完成之后,能够在install目录下面看到x64文件夹,如果没有就说明哪个环节出了问题。
我配置完成后就没有x64这个文件夹。
以下是具体步骤:
1、下载opencv、opencv contrib和cmake
opencv 和opencv contrib的下载地址如下:
https://github.com/opencv
主要就是这俩,
点击进入tags,查询具体型号
例如我下载的就是opencv4.5.0
这块opencv我是下载的这个,直接安装。
opencv contrib 和opencv流程一样,不再赘述。
cmake可以访问这个网址:https://cmake.org/download/,找到对应的版本下载,这里下载的为win64-x64安装程序
我看网上也有说必须下源文件,不能这样直接安装,但是我这样弄了也没啥问题,我估计推荐下源代码是因为直接采用安装包这样直接安装会导致某些opencv的源代码虽然下载成功,但是没有内容,也就是大小是0k。
2、在本地电脑建立文件夹
其中new_build是个人新建的,opencv_contrib450是下载的拓展包解压后的文件夹,其余都是opencv安装时建立的文件。
3、cmake编译
第一个框是选择opencv自带的源码,第二个框是选择编译后放置的代码位置,
其中有以下注意事项:
- 将OPENCV_EXTRA_MODULES_PATH路径填入opencv_contirb-master/modules
- 将OPENCV_ENABLE_NONFREE打上对钩(这块网上说的都是因为sift因为专利问题不打钩就无法使用)
选择好后点击configure按键,然后等待完成。
红色就表示下载有问题,需要注意。
这块的configure可以重复多次点击,多次点击后红色的框就会全部消失,但是其实问题都还存在,解决办法就是在日志里挨个查看。
日志文件 CMakeDownloadLog.txt 地址就在新建的new_build下,里面可以查看文件地址应该在哪放着,文件名称是什么,然后自己单独下载,修改文件名字然后放置好地址即可。
例如
#use_cache "D:/study/opencv-4.0.0/.cache"
#do_copy "opencv_ffmpeg.dll" "849286ccc527c99e5a218b67f13c6e8c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg"这两句的意思是说将 opencv_ffmpeg.dll(它的md5签名是 849286ccc527c99e5a218b67f13c6e8c,下载地址是 "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll" )从 "D:/study/opencv-4.0.0/.cache" 拷贝到 "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg"目录下。#missing "D:/study/opencv_with_contrib_test_sln/3rdparty/ffmpeg/opencv_ffmpeg.dll"
目标目录下没有此文件#cmake_download "D:/study/opencv-4.0.0/.cache/ffmpeg/849286ccc527c99e5a218b67f13c6e8c-opencv_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll"
下载此文件到源代码路径 /.cache/ffmpeg/,并命名为"md5-文件名"# timeout on name lookup is not supported
# Trying 151.101.108.133...
# TCP_NODELAY set
# connect to 151.101.108.133 port 443 failed: Connection refused
# Failed to connect to raw.githubusercontent.com port 443: Connection refused
# Closing connection 0
#
连接到服务器失败
简单来说就是有两种可能
- opencv文件下的sources下的某些文件大小为0k,为空,需要替换。
- 编译后的new_build下某些文件丢失,其实就是 opencv文件下的sources下的某些文件。
提供个快速从github加速下载的网址:GitHub Proxy
我本次缺少了以下三个文件,下载后文件名称如下:
opencv_videoio_ffmpeg.dll
opencv_videoio_ffmpeg_64.dll
face_landmark_model.dat
将其修改后为:
37e2dadf776631acc8856e281f29cf42-opencv_videoio_ffmpeg.dll
cf5dba83edf8619f57ccff4edb989c62-opencv_videoio_ffmpeg_64.dll
7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat
全部将其放置到对应文件夹下以后,可以再次点击configure按键,然后看看日志文件,显示没有缺失后就证明安装完成。
这块是别人的问题描述:
这块比较麻烦,刚开始我也不懂,后来弄得多了就明白其实就是没下载下来文件,如果还不懂可以参考以下文章:
代码笔记24 windows+cmake+Opencv4.5.5安装中出现的IPPICV: Download:ippicv_2020_win_intel64_20191018 general.zipl问题
【从零学习OpenCV 4】安装过程中问题解决方案
CMake编译OpenCV4.0时opencv_ffmpeg.dll等下载失败的解决思路总结
总结下注意事项
- 在 search 对话框中输入OPENCV_EXTRA_MODULES_PATH,找到OPENCV_EXTRA_MODULES_PATH后在value中填入编译opencv_contrib解压目录中的modules路径(注意此处路径的反斜杠\要改成正斜杠/,反斜杠\有转义字符的意思),最好是搜索填入路径,不要在文件夹下复制然后粘贴路径。
4、vs编译
我的文件在new_build下,点击opencv.sln,然后进入到vs2019中,首先选择是在debug64下进行编译,点击下图所示的 生成解决方案 ,点击下方的 重新生成解决方案 也可以。
然后在 CMakeTargets 中的 INSTALL ,然后右键选择 “仅限于项目” --> “仅生成INSTALL”;
其次,完成编译后,可在切换至Release模式下,把重新生成解决方案和生成install的操作再来一次。此时,install目录包含了我们需要的头文件、库文件等;
5、配置环境
附上我的电脑环境
具体的位置如下图所示
6、测试代码
#include "opencv2/opencv.hpp"
#include"opencv2/xfeatures2d.hpp"using namespace cv;
using namespace std;int main() {Mat img = imread("C:/Users/Desktop/test_1/1.png", 1);Ptr<Feature2D> sift = SIFT::create();vector<KeyPoint> keypoints;Mat descriptors;sift->detectAndCompute(img, noArray(), keypoints, descriptors);drawKeypoints(img, keypoints, descriptors, Scalar(0, 255, 255));imshow("Result", descriptors);waitKey(0);return 0;
}
运行需要设置属性
在VC++目录下,包含目录:
F:\opencv455\opencv\new_build\install\include\opencv2
F:\opencv455\opencv\new_build\install\include
库目录:
F:\opencv455\opencv\build\x64\vc15\lib
F:\opencv455\opencv\new_build\install\x64\vc16\lib
在连接器下,常规,添加库目录:
F:\opencv455\opencv\build\x64\vc15\lib
F:\opencv455\opencv\new_build\install\x64\vc16\lib
F:\opencv455\opencv\build\x64\vc14\lib
输入,附加依赖项:
opencv_world450d.lib
————————————————————————————————————————————————————————
这块可以参考这个文章:
包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
VS项目中的包含目录、库目录、附加包含目录、附加库目录、附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下:
VC++目录:
包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录库目录:寻找.lib文件的搜索目录
C/C++:
常规->附加包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录(每一项对应一个文件夹XXXX,文件夹中包含了编译时所需的头文件,使用时直接#include<XXXX>即可)
链接器:
常规->附加库目录:寻找.lib文件的搜索目录输入->附加依赖项:lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
————————————————————————————————————————————————————————
测试原图如下所示:
最后的效果如下图所示
附上我查找问题时的一些参考:
win10+vs2019+opencv+opencv_contirb 安装教程
VisualStudio2019安装配置OpenCV的C++环境
OpenCV + OpenCV Contrib安装教程(windows)
win10-vs2019-opencv_contrib安装教程(一步到位)
【VS2019+OpenCV4.5.1+OpenCV_contrib4.5.1安装+配置保姆式教程】
关于CMake Warning at cmake/OpenCVDownload.cmake:202 (message): FFMPEG: Download下载失败解决办法(傻瓜教程)
OpenCV之扩展模块安装
IPPICV: Download failed: 6;“Couldn‘t resolve host name“