(二)OpenCV特征提取与检测_15_BRISK特征匹配
发布时间
阅读量:
阅读量
Brisk(Binary Robust Invariant Scalable Keypoints)的关键点检测方法介绍 包括多尺度空间构建过程 在此过程中使用FAST9-16算法进行特征识别 并通过 FAST9-16 方法提取关键点位置 进而确定关键点在图像中的具体位置信息 最后生成关键区域的描述向量
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
//步骤一:读取图片并将图片灰度化
Mat src_obj, src_scene;
src_obj = imread("../path_obj.jpg", IMREAD_GRAYSCALE);
src_scene = imread("../path_scene.jpg", IMREAD_GRAYSCALE);
if (src_obj.empty() || src_scene.empty())
{
cout << "could not load image1..." << endl;
return -1;
}
/*
//BRISK特征点检测
Ptr<Feature2D> detector = BRISK::create();
vector<KeyPoint> keypoints;
detector->detect(src_scene, keypoints, Mat());
// 绘制关键点
Mat Brisk_dst;
drawKeypoints(src_scene, keypoints, Brisk_dst, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
imshow("Brisk_dst", Brisk_dst);
*/
//AKAZE特征点检测
Ptr<Feature2D> detector = BRISK::create();//创建一个AKAZE类对象并初始化
vector<KeyPoint> keypoints_obj;
vector<KeyPoint> keypoints_scene;
//定义描述子
Mat descriptor_obj, descriptor_scene;
//检测的同时计算描述子
detector->detectAndCompute(src_obj, Mat(), keypoints_obj, descriptor_obj);//关键点//描述子
detector->detectAndCompute(src_scene, Mat(), keypoints_scene, descriptor_scene);
//步骤三:特征点匹配
BFMatcher matcher(NORM_L2);//暴力匹配
vector<DMatch> matches;//对象源图像1的特征点匹配源图像2的特征点[matches[i]]
matcher.match(descriptor_obj, descriptor_scene, matches);
//步骤四:获取优秀匹配点
//步骤五:绘制特征匹配图
Mat brisk_match_dst;
drawMatches(src_obj, keypoints_obj, src_scene, keypoints_scene, matches, brisk_match_dst);
namedWindow("match_dst", WINDOW_AUTOSIZE);
imshow("match_dst", brisk_match_dst);
waitKey(0);
return 0;
}
输出结果:

全部评论 (0)
还没有任何评论哟~
