#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include "opencv2/features2d/features2d.hpp"
#include <opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat orig1, orig2;
orig1 = imread("1.jpg");
orig2 = imread("2.jpg");
int minHessian = 700;//SURF算法中的hessian阈值
SurfFeatureDetector detector(minHessian);//定义一个SurfFeatureDetector(SURF) 特征检测类对象
vector<KeyPoint> keyPoint1, keyPoint2;//vector模板类,存放任意类型的动态数组
//检测特征点并存放
detector.detect(orig1, keyPoint1);
detector.detect(orig2, keyPoint2);
//计算描述符(特征向量)
SurfDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(orig1, keyPoint1, descriptors1);
extractor.compute(orig2, keyPoint2, descriptors2);
BruteForceMatcher< L2<float> > matcher;
vector< DMatch > matches;
//匹配两幅图中的描述子(descriptors)
matcher.match(descriptors1, descriptors2, matches);
//绘制从两个图像中匹配出的关键点
Mat imgMatches;
drawMatches(orig1, keyPoint1, orig2, keyPoint2, matches, imgMatches);//进行绘制
//显示效果图
namedWindow("匹配图", WINDOW_NORMAL);
imshow("匹配图", imgMatches);
waitKey();
return 0;
}
SURF特征点描述
最新推荐文章于 2022-08-31 22:39:55 发布
本文通过使用SURF算法实现两幅图像之间的特征点检测及匹配,并利用OpenCV库完成匹配关键点的绘制与展示。
1万+

被折叠的 条评论
为什么被折叠?



