使用OpenCV3进行SURF特征提取和暴力匹配代码详解

    首先声明,程序代码来自于http://blog.csdn.net/taily_duan/article/details/53112896,这里使用MiddleBury的图片集进行了测试,并且对代码做一个详细的解释。

    之前使用OpenCV2.4.9,升级到3.2.0以后发现SURF特征提取的使用发生较大的变化,配置好新版本的opencv稳定模块和contrib模块后,原来的代码还是提示未声明的标识符,发现是新版本SURF使用方法调整了,所以借鉴新的SURF特征提取代码。


#include <iostream>  
#include <stdio.h>  
#include "opencv2/core.hpp"  
#include "opencv2/core/utility.hpp"  
#include "opencv2/core/ocl.hpp"  
#include "opencv2/imgcodecs.hpp"  
#include "opencv2/highgui.hpp"  
#include "opencv2/features2d.hpp"  
#include "opencv2/calib3d.hpp"  
#include "opencv2/imgproc.hpp"  
#include"opencv2/flann.hpp"  
#include"opencv2/xfeatures2d.hpp"  
#include"opencv2/ml.hpp"  

using namespace
  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用 OpenCvSharp 进行 SURF 特征匹配时,可以按以下步骤计算匹配分数: 1. 读入图像:首先使用 OpenCvSharp 加载需要匹配的两张图像。 2. 提取特征点和特征向量:使用 SURF 算法提取两张图像中的特征点和特征向量。 3. 特征匹配使用 FlannBasedMatcher 进行特征匹配,得到匹配对。 4. 计算匹配分数:根据匹配对计算匹配分数,可以使用 distance 进行距离计算,也可以使用 Lowe's ratio 进行比率测试。 示例代码: ``` // 读入图像 Mat img1 = Cv2.ImRead("img1.png", ImreadModes.Color); Mat img2 = Cv2.ImRead("img2.png", ImreadModes.Color); // 提取特征点和特征向量 SURF surfDetector = SURF.Create(500, 4, 2, true, true); KeyPoint[] keypoints1, keypoints2; Mat descriptor1, descriptor2; surfDetector.DetectAndCompute(img1, null, out keypoints1, descriptor1); surfDetector.DetectAndCompute(img2, null, out keypoints2, descriptor2); // 特征匹配 FlannBasedMatcher matcher = new FlannBasedMatcher(); DMatch[] matches = matcher.Match(descriptor1, descriptor2); // 计算匹配分数 double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptor1.Rows; i++) { double dist = matches[i].Distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } List<DMatch> goodMatches = new List<DMatch>(); for (int i = 0; i < descriptor1.Rows; i++) { if (matches[i].Distance <= Math.Max(2 * min_dist, 0.02)) { goodMatches.Add(matches[i]); } } double matchScore = (double)goodMatches.Count / (double)descriptor1.Rows; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值