मैं एक समलम्बाकार आकृति का पता लगाने के लिए एक एल्गोरिथ्म विकसित करने की कोशिश कर रहा हूँ। मैं वर्गों और ट्रैपेज़ॉयड के बीच अंतर करने के लिए ट्रैपेज़ॉयड के उल्टे कोण का पता लगाने का एक तरीका निकालने का प्रयास कर रहा हूं।
मैं केवल समोच्चों के माध्यम से लूप करता हूं, और अन्य विशेषताओं द्वारा ट्रैपेज़ॉयड को अलग करने का प्रयास करता हूं, क्योंकि मुझे वास्तव में यकीन नहीं है कि मैं कैसे जांच सकता हूं कि रेखाएं ट्रैपेज़ॉयड पर विपरीत हैं। कोई विचार?
मैं जो ट्रैक कर रहा हूं उसका एक उदाहरण यहां दिया गया है:
मैं अब तक यही लेकर आया हूं:
for cnt in contourList:
hull = cv2.convexHull(cnt)
x, y, w, h = cv2.boundingRect(cnt)
area = h * w * 1.0
originalArea = cv2.contourArea(hull)
#skip if not minimum area
if(originalArea < 200 ):
continue #too small!
kMinTargetWidth = 20
kMaxTargetWidth = 300
kMinTargetHeight = 6
kMaxTargetHeight = 60
if(w < kMinTargetWidth or w > kMaxTargetWidth):
continue
if(h < kMinTargetHeight or h > kMaxTargetHeight):
continue
#Ratio of width to height
#ratio should be 1 or greater
#target is 43 cm tall, 100 cm wide
ratio = float(w) / float(h)
if(ratio < 1.3):
continue #skip
kMinFullness = .50
kMaxFullness = .95
fullness = originalArea / area
if(fullness < kMinFullness or fullness > kMaxFullness):
continue
if(cv2.isContourConvex(cnt) == True):
continue
मेरी आशा थी कि इन समलम्बाकार वस्तुओं की अवतल प्रकृति आयतों/वर्गों की तुलना में विभेदित हो सकेगी। मैं अब सोच रहा हूं कि मुझे किसी तरह साइड एंगल की भी जांच करनी चाहिए।
या उत्तल पतवार लें और कोने के बिंदु खोजें। लेकिन मुझे लगता है कि ओपनसीवी में ऐसा कुछ पहले से ही बनाया गया है? मूल रूप से मैं पूछ रहा हूँ कि मैं क्या याद कर रहा हूँ!
1 उत्तर
यदि आप contourList
और cv2
को परिभाषित करते हैं, और आपके द्वारा आयात किए जाने वाले पैकेजों की पहचान करते हैं, तो मेरे सुझाव अधिक निर्देशित हो सकते हैं।
बस एक ट्रैपेज़ॉयड के साथ काम करना, मैं ट्रैपेज़ॉयड फीचर का उपयोग करने का सुझाव दूंगा: विपरीत रेखाओं का एक सेट समानांतर होता है और दूसरा सेट नहीं होता है। इसके लिए चार रेखाओं के ढलानों को जानना आवश्यक है। यदि आप उन ढलानों को सीधे नहीं जानते हैं, लेकिन आप शीर्षों को जानते हैं, तो आप चार ढलानों की गणना कर सकते हैं।
अनिवार्य रूप से, एक ट्रैपेज़ॉयड की परिभाषा का उपयोग करना मजबूत है, और ऐसे कई तरीके हैं जिनसे आप समानांतर और गैर-समानांतर निर्धारित कर सकते हैं।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।