到目前为止,我使用cv::SurfFeatureDetector
从图像中获取SURF点。现在我想要得到描述符。所以,我认为cv::SurfDescriptorExtractor
是我需要的。但是,我看到cv::SurfFeatureDetector
和SurfDescriptorExtractor
都可以检测SURF点并计算描述符。还有cv::SURF
可以做同样的事情。这三个有什么不同吗?
不,没有区别。
你可以在源代码中看到它们是相同的:
typedef SURF SurfFeatureDetector;
typedef SURF SurfDescriptorExtractor;
在实践中,XXXFeatureDetector
和XXXDescriptorExtractor
只是两个独立任务的公共接口,因此您可以将关键点检测从描述符计算中分离出来,例如您可以使用MSER检测关键点并使用SIFT计算描述符。
你可以在这里看到SURF inherits from
Feature2D ':
class CV_EXPORTS_W SURF : public Feature2D
FeatureDetector
和DescriptorExtractor
与Feature2D
相同:
typedef Feature2D FeatureDetector;
typedef Feature2D DescriptorExtractor;
FeatureDetector和DescriptorExtractor的区别是:
常见问题是提取OpenCV中的特征检测器具有具有公共接口的包装器,使您能够轻松地在解决相同问题的不同算法之间切换。所有实现关键点检测器的对象都继承了FeatureDetector接口。
KeyPoint
s。
OpenCV中关键点描述符的提取器具有具有公共接口的包装器,使您能够轻松地在解决相同问题的不同算法之间切换。本节致力于计算在多维空间中表示为向量的描述符。所有实现向量描述符提取器的对象都继承了DescriptorExtractor接口。
这种区别有助于将查找关键点的任务与计算描述符的任务分开,因为并非所有方法都能同时完成这两项任务。例如,MSER只是一个特征检测器,但不计算描述符。