OpenCV-4.5 SURF API

OpenCV 4.4.0 中SIFT专利到期 SIFT方法已经回归主库 使用时 cv::SIFT即可 , SURF还在nofree中 相较于之前版本 头文件不在 #include <opencv2/xfeatures2d.hpp> 而在 #include <opencv2/xfeatures2d/nonfree.hpp>中

opencv3.X以后中SurfFeatureDetector、SurfDescriptorExtractor、BruteForceMatcher这三个的使用方法已经和原先2.4版本前不一样,一般通过指针访问   最好看一下继承关系

老版多用类

SurfFeatureDetector detector(minHessian);//定义一个SurfFeatureDetector(SURF) 特征检测类对象
detector.detect(srcImage1, keypoints_1);

SurfDescriptorExtractor extractor; //定义一个特征点描述子
extractor.compute(srcImage1, keypoints_1, descriptors1);//计算描述符

BruteForceMatcher<L2<float>>matcher;//创建一个暴力匹配器
matcher.match(descriptors1, descriptors2, BFmatches);

新版多用智能指针

 Ptr<SURF> detector = SURF::create(minHessian);
 detector->detect(img_1, keypoints_1);

 Ptr<SURF> extractor = SURF::create();
 extractor->compute(img_1, keypoints_1, descriptors_1);

Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce");//这里填写使用的匹配方式
matcher->match(descriptors_1, descriptors_2, matches);

对于匹配器的调用

static Ptr<DescriptorMatcher> cv::DescriptorMatcher::create(const String & descriptorMatcherType)

descriptorMatcherTypeDescriptor matcher type. Now the following matcher types are supported:
  • BruteForce (it uses L2 )
  • BruteForce-L1
  • BruteForce-Hamming
  • BruteForce-Hamming(2)
  • FlannBased

 SiftDescriptorExtractor,有的是uchar类型的,比如说有ORB,BriefDescriptorExtractor。对应float类型的匹配方式有:FlannBasedMatcher,BruteForce<L2<float>>,BruteForce<SL2<float>>,BruteForce<L1<float>>。对应uchar类型的匹配方式有:BruteForce<Hammin>,BruteForce<HammingLUT>。所以ORB和BRIEF特征描述子只能使用BruteForce匹配法。

新版匹配器也常用派生类直接调用

 

BFMatcher BFmatch;

FlannBasedMatcher FLANNmatch;

https://blog.csdn.net/holybin/article/details/40926315

https://blog.csdn.net/xxzxxzdlut/article/details/72926011?spm=1001.2014.3001.5506

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值