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);
}
可能工作;-)
答
当使用ORB,你应该建立你的匹配,像这样:
FlannBasedMatcher matcher(new cv::flann::LshIndexParams(5, 24, 2));
我也看到this constructor suggested:
FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));
如果有人遇到这个问题,但使用OpenCV for Java,它可能是CvType.CV_32F而不是CV_32F。这是由于OpenCV项目决定从C/C++移植代码的结构。 – 2013-03-19 17:31:48
谢谢jstr,这真的帮助了我! – 2013-11-29 09:05:48
FLANNMatcher将比BFMatcher 更快,如果我转换描述符? –
2013-12-09 18:19:16