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:\Value\Personal\Parthenope\OpenCV\modules\flann\sr
c\miniflann.cpp, line 299

Ответ 2

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

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

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

Ответ 3

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

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

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

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