opencv FLANN с дескрипторами ORB?

Я пытаюсь использовать FLANN с дескрипторами ORB, но opencv падает с этим простым кодом:

vector<vector<KeyPoint> > dbKeypoints;
vector<Mat> dbDescriptors;
vector<Mat> objects;   

/*
  load Descriptors from images (with OrbDescriptorExtractor())
*/

FlannBasedMatcher matcher;

matcher.add(dbDescriptors); 
matcher.train() //> Crash!

Если я использую SurfDescriptorExtractor() он работает хорошо.

как я могу решить это?

OpenCV говорит:

OpenCV Error: Unsupported format or combination of formats (type=0
) in unknown function, file D:ValuePersonalParthenopeOpenCVmodulesflannsr
cminiflann.cpp, line 299

3 ответов


Flann нуждается в дескрипторах типа CV_32F, поэтому вам нужно их преобразовать! find_object / example / main.cpp:

if(dbDescriptors.type()!=CV_32F) {
    dbDescriptors.convertTo(dbDescriptors, CV_32F);
}

может работать ;-)


Это ошибка. Это будет исправлено в ближайшее время.

http://answers.opencv.org/question/503/how-to-use-the-lshindexparams/


при использовании ORB вы должны построить свой сопоставитель следующим образом:

FlannBasedMatcher matcher(new cv::flann::LshIndexParams(5, 24, 2));

Я тоже видел этот конструктор предложил:

FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));