#include <opencv2\opencv.hpp>
#include <iostream>
#include "opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat srcImage1 = imread("2.jpg", 1);
Mat srcImage2 = imread("3.jpg", 1);
if (!srcImage1.data || !srcImage2.data)
{
printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false;
}
//【2】使用SURF算子检测关键点
int minHessian = 700;//SURF算法中的hessian阈值
Ptr<xfeatures2d::SURF> detector = xfeatures2d::SURF::create(minHessian);//定义一个SurfFeatureDetector(SURF) 特征检测类对象
std::vector<KeyPoint> keyPoint1, keyPoints2;//vector模板类,存放任意类型的动态数组
//【3】调用detect函数检测出SURF特征关键点,保存在vector容器中
detector->detect(srcImage1, keyPoint1);
detector->detect(srcImage2, keyPoints2);
//【4】计算描述符(特征向量)
Ptr<xfeatures2d::SURF> extractor = xfeatures2d::SURF::create();
Mat descriptors1, descriptors2;
extractor->compute(srcImage1, keyPoint1, descriptors1);
extractor->compute(srcImage2, keyPoints2, descriptors2);
//【5】使用BruteForce进行匹配
// 实例化一个匹配器
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce");
std::vector< DMatch > matches;
//匹配两幅图中的描述子(descriptors)
matcher->match(descriptors1, descriptors2, matches);
//【6】绘制从两个图像中匹配出的关键点
Mat imgMatches;
drawMatches(srcImage1, keyPoint1, srcImage2, keyPoints2, matches, imgMatches);//进行绘制
//【7】显示效果图
imshow("匹配图", imgMatches);
waitKey(0);
return 0;
}
SURF算子(opencv3.0)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 步骤一 Cmake Opencv 1.下载Cmake编译器,网址链接 https://cmake.org/down...
- 一般的配置方法在此不赘述,只列出关键部分。重点在openCV3.2版本x86的生成。 配置Win32(Cmake得...
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子, Sobel算子, Laplace算子, Sc...