opencv带有ORB描述符的FLANN?

问题描述:

我试图用ORB描述符,但OpenCV的崩溃使用FLANN这个简单的代码:opencv带有ORB描述符的FLANN?

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 

弗莱恩需要描述为类型CV_32F的,所以你需要将它们转换! find_object/example/main.cpp

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

可能工作;-)

+2

如果有人遇到这个问题,但使用OpenCV for Java,它可能是CvType.CV_32F而不是CV_32F。这是由于OpenCV项目决定从C/C++移植代码的结构。 – 2013-03-19 17:31:48

+1

谢谢jstr,这真的帮助了我! – 2013-11-29 09:05:48

+1

FLANNMatcher 将比BFMatcher 更快,如果我转换描述符? – 2013-12-09 18:19:16

当使用ORB,你应该建立你的匹配,像这样:

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

我也看到this constructor suggested

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