2012-07-19 3 views
14

私はこの単純なコードとORB記述子が、OpenCVのクラッシュでFLANNを使用しようとしています:ORBディスクリプタのopencv 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 

答えて

32

FLANNは、あなたがそれらを変換する必要があるので、型CV_32Fであることが記述子を必要としています! find_object/example/main.cpp

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

;-)

+2

の場合誰かがこの質問に到達しますが、OpenCV for Javaを使用すると、CV_32Fの代わりにCvType.CV_32Fとなる可能性があります。これは、OpenCVプロジェクトがC/C++からコードを移行することを決めたためです。 –

+1

おかげでjstr、これは本当に私を助けた! –

+1

はFLANNMatcher は、記述子を変換するとBFMatcher より速くなりますか? –

4

ORBを使用する場合は、あなたがそうのようなあなたのマッチャーを構築しなければならない作業があります。私もthis constructor suggestedを見てきました

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

を:

FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2)); 
関連する問題