opencv3将opencv2单一的库分成了两个部分:成熟的Opencv库以及opencv-contrib库,这篇博客利用的是已经编译好的opencv文件,编译完成的库文件见已上传资源部分https://download.youkuaiyun.com/download/weixin_41220184/11419344。
(1)首先需要配置环境变量,新增一个系统变量,变量名字为OPENCV值为#opencv。
然后在用户变量path新增一个值#opencv/x64/vc14/bin。
(2)打开vs2015,新建一个工程并在属性管理器下面找到Debug|x64 cpp.x64.user鼠标右键--》属性--》vc++目录--》包含目录里面增加#opencv/include,#opencv/include/opencv,#opencv/include/opencv2三条记录
(3)在vc++目录--》库目录里面增加#opencv\x64\vc14\lib记录
(4)在连接器--》输入--》附加依赖项添加记录(#\opencv\x64\vc14\lib文件夹里面的lib文件),如下所示
opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_bioinspired310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_text310d.lib
opencv_text310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib
最后进行特征点检测,代码如下:
#include <opencv\cv.hpp>
#include<opencv2\xfeatures2d.hpp>
#include <vector>
#include<iostream>
using namespace std;
using namespace cv;
void main()
{
Mat srcImg1 = imread("C://Users//lenovo//Desktop//img1.jpg");
Mat srcImg2 = imread("C://Users//lenovo//Desktop//img2.jpg");
vector<KeyPoint> keypoints_1, keypoints_2;
Ptr<cv::Feature2D> f2d = xfeatures2d::SIFT::create();
//detect Keypoints
f2d->detect(srcImg1, keypoints_1);
f2d->detect(srcImg2, keypoints_2);
// caculate descriptors
Mat descriptors1, descriptors2;
f2d->compute(srcImg1, keypoints_1, descriptors1);
f2d->compute(srcImg2, keypoints_2, descriptors2);
//Matching descriptors
BFMatcher matcher;
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
//绘制图
Mat img_matches;
drawMatches(srcImg1, keypoints_1, srcImg2, keypoints_2, matches, img_matches);
imshow("【特征点匹配图", img_matches);
imwrite("C://Users//lenovo//Desktop//img3.jpg", img_matches);
waitKey(0);
}
说明:
(1)文件的路径需要自己设置
(2)如果程序运行过程中出现dll文件缺失,需要手动将#opencv\install\x64\vc14\bin内的dll文件复制到C:\Windows\SysWOW64(64位)或者C:\Windows\System32(32位)中保证程序正常运行。
原始图像:
img1
img2
检测结果:
img3