FLANN进行特征点匹配

本文介绍如何使用OpenCV3的FLANN算法进行特征点匹配,通过SURF算法提取图片特征点,并利用FLANN匹配器寻找最佳匹配点,最终绘制匹配结果。

opencv3使用FLANN进行特征点匹配
废话不多说,直接上代码:`#include<opencv2\opencv.hpp>
#include<opencv2\xfeatures2d.hpp>
#include
using namespace cv;
using namespace xfeatures2d;
using namespace std;
int main()
{
Mat src1 = imread(“1.jpg”,1);
Mat src2 = imread(“2.jpg”,1);
namedWindow(“input1”, WINDOW_NORMAL);
imshow(“input1”, src1);
imshow(“input2”, src2);
int minHessian = 400;
Ptrsurf = SURF::create(minHessian);
vectorkeypoint1, keypoint2;

Mat descriptors1, descripors2;
surf->detectAndCompute(src1, Mat(), keypoint1, descriptors1);
surf->detectAndCompute(src2, Mat(), keypoint2, descripors2);

FlannBasedMatcher matcher;
vector<DMatch>matches;
matcher.match(descriptors1, descripors2, matches);

double minDist = 1000;
double maxDist = 0;
for (int i = 0; i < descriptors1.rows; i++)
{
	double dist = matches[i].distance;
	if (dist > maxDist)
	{
		maxDist = dist;
	}
	if (dist < minDist)
	{
		minDist = dist;
	}
}
printf("max distance:%1f\n", maxDist);
printf("min distance:%1f\n", minDist);
vector<DMatch>goodMatchers;
for (int i = 0; i < descriptors1.rows; i++)
{
	double dist = matches[i].distance;
	if (dist < max(2 * minDist, 0.15))
	{
		goodMatchers.push_back(matches[i]);
	}
}
Mat matchimg;
drawMatches(src1, keypoint1, src2, keypoint2, goodMatchers, matchimg, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
for (int i = 0; i < goodMatchers.size(); i++)
{
	printf(">符合条件的匹配点[%d] 特征点1:%d--特征点2:%d  \n", i, goodMatchers[i].queryIdx, goodMatchers[i].trainIdx);
}
namedWindow("output1", WINDOW_NORMAL);
imshow("output1", matchimg);
waitKey(0);
return 0;

}`
截图如下:
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值