到目前为止,我使用cv::SurfFeatureDetector
从图像中获取SURF点。现在我想得到描述符。所以,我认为cv::SurfDescriptorExtractor
是我需要的。但是,我看到cv::SurfFeatureDetector
和SurfDescriptorExtractor
都可以检测到SURF点并计算描述符。还有cv::SURF
可以做同样的事情。这3个之间有什么区别吗?
答案 0 :(得分:0)
不,没有区别。
您可以在source code中看到它们是相同的:
typedef SURF SurfFeatureDetector;
typedef SURF SurfDescriptorExtractor;
实际上,XXXFeatureDetector
和XXXDescriptorExtractor
只是两个独立任务的通用接口,因此您可以将关键点检测与描述符计算分开,例如,您可以使用MSER检测关键点并进行计算SIFT的描述符。
您可以看到here SURF inherits from
Feature2D`:
class CV_EXPORTS_W SURF : public Feature2D
FeatureDetector
和DescriptorExtractor
the same为Feature2D
:
typedef Feature2D FeatureDetector;
typedef Feature2D DescriptorExtractor;
FeatureDetector 和 DescriptorExtractor 之间的区别是:
OpenCV中的特征检测器具有包含通用接口的包装器,使您可以轻松地在解决相同问题的不同算法之间切换。实现关键点检测器的所有对象都继承FeatureDetector接口。
常见问题是提取KeyPoint
s。
OpenCV中关键点描述符的提取器具有包含通用接口的包装器,使您可以轻松地在解决相同问题的不同算法之间切换。本节致力于计算描述符,表示为多维空间中的向量。实现向量描述符提取器的所有对象都继承DescriptorExtractor接口。
这种区别对于将查找关键点的任务与计算描述符的任务分开很有用,因为并非所有方法都能同时执行这两项操作。例如。 MSER只是一个特征检测器,但不计算描述符。