我只是想知道,如果使用 SurfFeatureDetector 来检测关键点并使用 SurfDescriptorExtractor 来提取 SURF 描述符(参见下面的代码,如此处所述)不会提取描述符两次。
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints;
detector.detect( img, keypoints ); //detecting keypoints, extracting descriptors without returning them
SurfDescriptorExtractor extractor;
Mat descriptors;
extractor.compute( img, keypoints, descriptors ); // extracting descriptors a second time
openCV 文档说,这两个类是 SURF() 类的包装器。是重载的SURF::operator()
,一个版本只采用一个关键点向量,另一个版本另外采用一个向量作为描述符。是什么让我着迷……然后都调用了该cvExtractSURF()
函数,该函数似乎提取了描述符,无论如何……(我没有深入研究 C 代码,因为我觉得很难理解,所以也许我错了) 但这意味着SurfFeatureDetector
将提取描述符而不返回它们。SurfDescriptorExtractor
在下一步中使用它只是第二次,这对我来说似乎非常低效。但我说得对吗?