2012-07-19 17 views
14

मैं इस सरल कोड के साथ ओर्ब वर्णनकर्ता, लेकिन opencv दुर्घटनाओं के साथ Flann उपयोग करने के लिए कोशिश कर रहा हूँ: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

हैं कोई इस सवाल तक पहुंचता है लेकिन जावा के लिए ओपनसीवी का उपयोग करता है, यह सीवी_32 एफ के बजाय सीवीटीपी.सीवी_32 एफ हो सकता है। यह संरचना के कारण है कि ओपनसीवी परियोजना ने सी/सी ++ से कोड के माइग्रेशन करने का निर्णय लिया है। –

+1

धन्यवाद jstr, यह वास्तव में मेरी मदद की! –

+1

क्या FLANNMatcher BFMatcher से अधिक तेज होगा यदि मैं वर्णनकर्ताओं को परिवर्तित करता हूं? –

4

काम कर सकते हैं ओर्ब का उपयोग कर जब आप ऐसा तरह अपने मिलान निर्माण करना चाहिए:

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

मैं भी this constructor suggested देखा है:

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