2012-07-19 12 views
14

estoy tratando de utilizar FLANN con descriptores de ORB, pero se bloquea OpenCV con este código simple:opencv FLANN con descriptores 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! 

Si uso SurfDescriptorExtractor() funciona bien.

¿Cómo puedo solucionar esto?

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 

Respuesta

32

Flann necesita los descriptores a ser de tipo CV_32F por lo que necesita para convertirlos! find_object/example/main.cpp:

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

pueden trabajar ;-)

+2

Si Alguien llega a esta pregunta pero usa OpenCV para Java, podría ser CvType.CV_32F en lugar de CV_32F. Esto se debe a la estructura que el proyecto OpenCV decidió hacer la migración del código de C/C++. –

+1

Gracias jstr, ¡esto realmente me ayudó! –

+1

es FLANNMatcher será más rápido que BFMatcher si convierto los descriptores? –

4

Al utilizar ORB debe construir su coincidencias de este modo:

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

También he visto this constructor suggested:

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