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));