2012-07-19 17 views
14

Sto cercando di utilizzare FLANN con descrittori di ORB, ma si blocca OpenCV con questo semplice codice:opencv FLANN con descrittori ORB?

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

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

FlannBasedMatcher matcher; 

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

Se uso SurfDescriptorExtractor() funziona bene.

Come posso risolvere questo?

OpenCV dice:

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 

risposta

32

Flann ha bisogno dei descrittori di essere di tipo CV_32F quindi è necessario convertirli! find_object/example/main.cpp:

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

può funzionare ;-)

+2

Se qualcuno raggiunge questa domanda ma usa OpenCV per Java, potrebbe essere CvType.CV_32F invece di CV_32F. Ciò è dovuto alla struttura che il progetto OpenCV ha deciso di eseguire la migrazione del codice da C/C++. –

+1

Grazie jstr, questo mi ha davvero aiutato! –

+1

è FLANNMatcher sarà più veloce di BFMatcher se converto i descrittori? –

4

Quando si utilizza ORB si dovrebbe costruire il vostro matcher in questo modo:

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

Ho visto anche this constructor suggested:

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