https://github.com/opencv/
选择opencv4.1.0和对应的contrib4.1.0(当然其他版本类似)
win10
VS2017
两者最好放在同一个文件夹上。
下载缺失文件
链接:https://download.csdn.net/download/weixin_43193231/12272081
将下载好的上面缺失文件直接放在 opencv_contrib/modules/xfeatures2d/src/ 路径下
将相应缺失文件从opencv-4.0.0/modules/features2d/test/拖至对应opencv_contrib/modules/xfeatures2d/test/目录下
双击cmake-gui.exe
where is the source code:输入opencv4.1.0的源码路径
where to build the binaries:输入你想解析源码的路径。(前面在opencv4.1.0里面新建了一个build文件夹用来等下cmake执行后生成的文件,)
点击configure
或者是vs15 win64 总之一定要win64!要与后面的vs2017的选择x64相对于
完成上述后找到OPENCV_EXTRA_MODULES_RATH一项,添加你刚刚解压的opencv_contrib中的modules目录,(注意是modules目录)
把OPENCV_ENABLE_NONFREE选上,再勾选opencv world。
(如果报错,检测目录,查看错误提示,一般都是下载或者目录问题)
generate done 后可以关闭cmake了。
此时,在自己刚刚新建的文件夹build出现很多解析文件,用vs2017打开OpenCV.sln
1、选择release版本,x64。(网络教程大多数是debug,这里我是配置release,这是vs的两种编译方法,任选其中一种就好了。如果你选择debug版本,到后面只需要改一处地方就好,后面会提到。但是x64,务必选择x64,不要86)
2、点击“生成—>重新生成解决方案。等待很久。
3、没有错误后,解决方案资源管理器—>CMakeTargets—>INSTALL—>仅用于项目—>仅生成INSTALL(B)
此时会在build文件下,新建install文件夹里面装的都是重要东西,请记住这个路径。
其中include是头文件,x64是vs配置的文件,刚刚我们仅生成install后会在x64目录下vc15或v14,有lib和bin目录。VS配置实际上就是告诉VS2017,include的头文件在哪,库文件lib在哪。
右键电脑【属性】
【高级系统设置】
【环境变量】
【系统变量】【Path】
变量名随便,路径…install\x64\vc15\bin
目的是让系统找到opencv的bin目录
将该路径所有的dll复制到下面C盘中的两个路径中,目的是为了让系统找到OpenCV的dll文件
新建完之后,选择release x64,(想debug配置选debug,不过要和前面用VS编译选择的对应,就是刚刚编译很长的那里选debug的话,这就选debug,选release的就选release,我选择release教学)
选择release选release,debug的选debug,x64。
VC++目录—>包含目录中添加:
G:\software\Opencv4.1.0\opencv-4.1.0\build\install\include\opencv2
G:\software\Opencv4.1.0\opencv-4.1.0\build\install\include
(opencv4少了G:\software\Opencv4.1.0\opencv-4.1.0\build\install\include\opencv 这一条,不是opencv4要添加这一条)
数字对应版本
需要注意,release写opencv_world410.lib
debug的写opencv_world410d.lib。(这是选择两种方法,配置不同之处就在这里)
#include "opencv2/opencv.hpp"
#include"opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace std;
int main() {
Mat img = imread("1.jpg");//图片路径,可以是相对路径,也可以是绝对路径
cvtColor(img, img, COLOR_BGR2GRAY);
Ptr sift = xfeatures2d::SIFT::create();
vector keypoints;
Mat descriptors;
sift->detectAndCompute(img, noArray(), keypoints, descriptors);
drawKeypoints(img, keypoints, descriptors, Scalar(0, 255, 255));
imshow("Result", descriptors);
waitKey(0);
return 0;
}