2012-07-02 14 views
5

मैं नीचे दी गई छवि पर OpenCV में findcontours() फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं।ओपनसीवी findcontours प्रत्येक सर्कल के लिए 2 contours देता है

findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));

जब मैं इस क्वेरी कार्य करें: contours.size() यह 18 देता है, ताकि प्रत्येक चक्र के लिए 2 समोच्च लगता है। मंडलियां हैं क्योंकि आप 1-पिक्सेल मोटी देख सकते हैं, यह 2 रूपांतर कैसे है? क्या यह बाहरी और एक आंतरिक के लिए है, यदि हां, तो मैं इस मंडल को प्रत्येक सर्कल के लिए केवल एक समोच्च का पता लगाने के लिए कैसे मजबूर कर सकता हूं? मैंने सोचा कि एक समोच्च को पिक्सेल के एक जुड़े अनुक्रम के रूप में परिभाषित किया गया था, 1 पिक्सेल मोटी।

Says there are 18 contours!!

उत्तर

4

मैं इस बात की पुष्टि नहीं कर सकते, लेकिन मैं इस समारोह के द्वारा प्रयोग किया एल्गोरिथ्म कुछ प्रत्येक कार्य के लिए ढाल की गणना के बराबर करता है लगता है। जिसका अर्थ यह है कि बाहरी किनारे पर और एक भीतरी किनारे पर एक समोच्च मिलेगा जैसा आपने सुझाव दिया था। इस बात की पुष्टि करने के लिए, आपके पास कोई इनपुट छवि जहां हलकों सफेद से भर दिया है उपयोग करने के लिए (आंतरिक समोच्च elimininating) की कोशिश कर सकते

आप भी findContours ढंग से काम

उदाहरण के लिए पर विभिन्न मापदंडों के साथ परीक्षण कर सकते हैं, की कोशिश CV_RETR_EXTERNAL बजाय CV_RETR_TREE का उपयोग कर रहा आंतरिक चक्र बाहरी एक के भीतर नीडिंत है मान लेते हैं, तो यह उसे बलपूर्वक चाहिए केवल बाहरी लोगों

+0

लेकिन जब मैं इस उदाहरण को देखता हूं [यहां] (http://jmpelletier.com/a-simple-opencv-tutorial/) ऐसा लगता है कि यह आंतरिक और बाहरी को अलग-अलग गिनती नहीं कर रहा है। लेकिन उदाहरण में findcontours का सी संस्करण है। क्या पुराने और नए कार्यान्वयन के बीच कोई अंतर है? –

+0

नहीं, सी और सी ++ संस्करण के बीच कोई अंतर नहीं होना चाहिए जो अंतिम परिणाम को प्रभावित करेगा। वास्तव में मुझे जो याद है, वह एक दूसरे के लिए सिर्फ एक आवरण है। हालांकि, उस लिंक से छवियों को देखते हुए, मैंने जो कहा है उसके विपरीत मैं देखता हूं। ऐसा लगता है कि प्रत्येक सर्कल के लिए आंतरिक और बाहरी समोच्च दोनों का पता लगाना है, जो – Naps62

+1

दिखाए गए चित्र पर और भी अधिक समझ में आता है, वास्तव में, CV_RETR_EXTERNAL ध्वज का उपयोग करके इसे आपके लिए ठीक करना चाहिए। झंडे की पूरी सूची के लिए यहां देखें: http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#void findContours (इनपुटऑटपुटएरे छवि, आउटपुटएर्रेऑफअरेरेस कॉन्टूर, आउटपुटएरे पदानुक्रम, int मोड, int विधि, प्वाइंट ऑफसेट) –

0

आपने पहले ही इस लगा बाहर कर दिया है हो सकता है लौटने लेकिन ... के लिए

खोज सामग्री केवल सफेद वस्तुओं के बारे में चिंतित है और इसलिए प्रत्येक बैंड के रूप में खोखले सर्कल को पहचानता है, इस प्रकार दो रूपों का उत्पादन करता है।

बेस्ट सर्कल के साथ एक और छवि बनाने और उस छवि के लिए ढूंढने के लिए सबसे अच्छा तरीका है। यह आपको वह देगा जो आप चाहते हैं।

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