2013-04-25 7 views
5

के साथ ड्राइंग मैचों को मैं इस काम को काम करने के लिए नहीं मिल सकता। असल में मैं फीचर डिटेक्शन कर रहा हूं और एक संदर्भ छवि के साथ मेल खाता हूं। मैं अपनी इनपुट छवि के शीर्ष पर मिलान की गई सुविधाओं को ओवरले करना चाहता हूं। यहां मेरा कोड है:एंड्रॉइड ओपनसीवी: फीचर 2 डी

public Mat startProcessing(Mat inputImage) { 

    Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB); 
    myFeatures.detect(rgb, keypoints); 
    descriptorExtractor.compute(inputImage, keypoints, imageDescriptors); 
    descriptorMatcher.match(templateDescriptors, imageDescriptors, matches); 

    Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb); 

    Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA); 
    return outputImage; 
} 

यह विशेषताएं 2d.drawMatches जो विशेष रूप से समस्या है। एंड्रॉइड त्रुटि के अनुसार मुझे मिल गया है, कुछ आयाम अस्तर नहीं कर रहे हैं। सत्य कहा जाता है, मुझे यह भी यकीन नहीं है कि drawMatches एंड्रॉइड पर काम करना चाहिए क्योंकि कहीं भी कोई दस्तावेज नहीं है।

मैं जो करने में सक्षम होना चाहता हूं वह इनपुट इमेज के शीर्ष पर मैच खींचता है। मुझे काम करने के लिए Feature2d.drawKeypoints मिल गया है, लेकिन मुझे यकीन है कि मैं MatOfDMatch matches को MatOfKeypoint ऑब्जेक्ट में कनवर्ट करने के बारे में कैसे सुनिश्चित करूंगा। इसके अलावा मुझे यह भी यकीन नहीं है कि MatOfDMatch कैसे काम करता है - क्या इसमें इसके अंदर कुछ सहयोगीता नहीं है जो वर्णनकर्ताओं के अनुरूप है?

जगह पर होने के लिए खेद है, मुझे एंड्रॉइड के साथ ओपनसीवी का उपयोग करने में वास्तव में कठिन समय है। वहां सी ++ दस्तावेज अच्छा है, लेकिन एंड्रॉइड सामग्री के रास्ते में बहुत कम है। किसी भी मदद के लिए धन्यवाद!

उत्तर

6

पहली बात जो मैंने देखा है वह यह है कि आप छवियों को एक रंग स्थान से दूसरे में परिवर्तित कर रहे हैं। यह थोड़ा उलझन में है। यदि आप ग्रेस्केल छवियों पर मैचों को आकर्षित करना चाहते हैं, तो इस छवि रूपांतरण को निष्पादित करना आवश्यक नहीं है। अन्य बात, आप आरजीबी छवि पर keypoints पता लगा पाए हैं और फिर मूल छवि से वर्णनकर्ता निकालने (के रूप में मैं देख सकता हूँ यह ग्रेस्केल है)

इसके अलावा, मैं आप अपने समारोह के अंदर जांच करने के लिए करता है, तो छवियों एक ही प्रकार के कर रहे हैं सुझाव देते हैं। बस inputImage ऑब्जेक्ट में लॉग इन करें और देखें कि दोनों CV_8UC3 या समकक्ष हैं या नहीं। मूल रूप से अपने कोड इस तरह होना चाहिए:

Mat imageOut = inputImage.clone(); 
Features2d.drawMatches(inputImage, keypoints, templateImage, templateKeypoints, matches, imageOut); 
Highgui.imwrite("result_match.jpeg", imageOut); 

एक और अपने प्रश्नों के उत्तर देना:

प्रश्न: मैं अनिश्चित कैसे मैं एक MatOfKeypoint वस्तु को MatOfDMatch मैचों में परिवर्तित करने के बारे में जाना होगा हूँ। ए: आपको इसे करने की आवश्यकता नहीं है, क्योंकि drawMatches फ़ंक्शन इनपुट छवि और टेम्पलेट छवि के MatOfKeypoint प्राप्त करता है। फिर जब आप MatOfDMatch पास करते हैं तो यह मेल किए गए प्राप्त केपॉइंट्स के बीच मिलान खींचता है।

प्रश्न: यह भी मुझे यकीन नहीं है कि MatOfDMatch काम करता है - क्या इसमें इसके अंदर कुछ सहयोगीता नहीं है जो वर्णनकर्ताओं के अनुरूप है? ए: हां यह है। यदि आप matches.toList(0).queryIdx और matches.toList(0).trainIdx करेंगे तो आपको inputImage की कीपॉइंट की अनुक्रमणिका मिल जाएगी, जो पहले मैच के templateImage के मुख्य बिंदु से मेल खाती है।

+0

अभी तक धन्यवाद। मैंने imageOut = inputImage.clone() का उपयोग शुरू किया और इससे drawMatches काम करने देता है। हालांकि मैं इस छवि को वापस करना चाहता हूं जैसे कि उपयोगकर्ता कैमरे पर क्या देखता है लेकिन आयाम थोड़ा अलग हैं - यह 640 * 480 के कैमरे के संकल्प के बजाय 704 * 480 है। यह देखते हुए कि मेरी टेम्पलेट छवि की चौड़ाई 64 है, ऐसा लगता है कि drawMatches उन्हें एक तरफ रख रहा है। क्या मैं सिर्फ इनपुट छवि पर मिलान किए गए क्षेत्र पर एक आयताकार या कुछ दिखा सकता हूं? – JDS

+2

हाँ मुझे ऐसा लगता है। सूची 'सूची match_list = match.toList(); सूची kp_list = keypoints.toList();' और फिर सूची 'kp_list.get (match_list.get (i) .queryIdx) के माध्यम से पुनरावृत्त करने के लिए मिलान और कीपॉइंट्स को बदलें।' और अपने आयत को परिभाषित करने वाले दो बिंदुओं का सामना करने के लिए मिलान किए गए कीपॉइंट्स के न्यूनतम और अधिकतम एक्स और वाई को ढूंढें।फिर एक आयताकार 'रेक्ट रोई = नया रेक्ट (नया प्वाइंट (मिनीएक्स, मिनीवाई), नया प्वाइंट (मैक्सएक्स, मैक्सवाई)) परिभाषित करें और फिर बस' मैट छविफिन = नई मैट (इनपुट इमेज, रोई) करें; 'और यह केवल फसल होगा मिलान क्षेत्र – andriy

संबंधित मुद्दे