2011-10-16 2 views
5

एंड्रॉइड फोन के साथ एक तस्वीर लेने के बाद मैं उदाहरण में क्लिक करके चित्र में किसी ऑब्जेक्ट की पहचान करना चाहता हूं। ज्यादातर मामलों में संभव वस्तुओं:
1. शासक
2. व्यक्ति
3. पेंसिल
मैं एंड्रॉयड पहले से बनाए गए-opencv संस्करण 2.3.1 का उपयोग कर रहा हूँ और मैं शासक वस्तु में क्लिक करें और इसे में चिह्नित करने के floodfill की कोशिश की, लेकिन अगर समोच्च बंद नहीं होते हैं तो पूरी तस्वीर भर जाएगी।
ए) मैंने शासक वस्तु में क्लिक करने की कोशिश की और दक्षिण, उत्तर, पूर्व, पश्चिम में यह देखने के लिए कि किनारों को किनारे हैं और इन निर्देशांक एकत्रित करते हैं, लेकिन मैं वहां भारी समस्याएं चला रहा हूं (पूछो मत)।ऑब्जेक्ट डिटेक्शन एंड्रॉइड ओपनसीवी

प्रश्न:
1. क्या वांछित वस्तु को भरने के लिए किसी भी तरह से समोच्चों को बंद करना संभव है?
2. जो मैं वास्तव में खोजना चाहता हूं वह नीचे के समन्वयक और (उदा।) शासक की ऊंचाई हैं।
किसी अन्य समाधान की सराहना की जाती है। आप इसे कैसे महसूस करेंगे?

अपडेट: मैंने समस्या को हल किया है) और इस समय इस दृष्टिकोण का उपयोग करें (इसके बारे में खुश नहीं)। मैंने एंट्रेको के दृष्टिकोण की भी कोशिश की, लेकिन अब तक वांछित समाधान नहीं देना प्रतीत होता है।

उत्तर

6

मुझे नहीं पता कि आपने यह कोशिश की है, लेकिन आमतौर पर, आप पहले छवि को संसाधित करके बेहतर परिणाम प्राप्त कर सकते हैं।

1) लागू करें GuassianBlur शोर

2) AdaptiveThreshold लागू दूर करने के लिए - काले और सफेद

3) लागू करें Dilate आपरेशन करने के लिए छवि परिवर्तित करने के लिए, दरारें

का उपयोग करके भरने के लिए> अनुकूली थ्रेसहोल्ड और Dilate ऑपरेशन के लिए अलग सेटिंग्स, आप बंद contours प्राप्त करने में सक्षम हो सकता है ...

एक उदाहरण मैंने उपयोग किया इस तरह है:

// 1) Apply gaussian blur to remove noise 
Imgproc.GaussianBlur(mGraySubmat, mIntermediateMat, new Size(11,11), 0); 

// 2) AdaptiveThreshold -> classify as either black or white 
Imgproc.adaptiveThreshold(mIntermediateMat, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 2); 

// 3) Invert the image -> so most of the image is black 
Core.bitwise_not(mIntermediateMat, mIntermediateMat); 

// 4) Dilate -> fill the image using the MORPH_DILATE 
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1)); 
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel); 
+0

उत्तर @Entreco के लिए बहुत बहुत धन्यवाद। मैं कोशिश करूँगा और रिपोर्ट करूंगा। – gartenabfall

+0

@Entreco हम बंद contours –

+0

के चारों ओर एक आयताकार खींच सकते हैं अगर काले आयत वस्तु अगर यह किनारे का पता नहीं लगा है। –