Мне просто интересно, если бы использование 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 гласит, что эти 2 класса являются обертками для класса SURF ().
SURF::operator()
перегружен, одна версия принимает только вектор ключевой точки, а другая дополнительно принимает вектор для дескрипторов.
Что меня заинтриговало ... оба затем вызывают функцию cvExtractSURF()
, которая, кажется, извлекает дескрипторы, несмотря ни на что ... (Я не слишком углубился в код C, так как мне трудно это понять, поэтому, возможно, я ошибаюсь)
Но это будет означать, что SurfFeatureDetector
будет извлекать дескрипторы, не возвращая их. Использование SurfDescriptorExtractor
на следующем шаге просто делает это во второй раз, что мне кажется очень неэффективным. Но я прав?