मैं एक समलम्बाकार आकृति का पता लगाने के लिए एक एल्गोरिथ्म विकसित करने की कोशिश कर रहा हूँ। मैं वर्गों और ट्रैपेज़ॉयड के बीच अंतर करने के लिए ट्रैपेज़ॉयड के उल्टे कोण का पता लगाने का एक तरीका निकालने का प्रयास कर रहा हूं।

मैं केवल समोच्चों के माध्यम से लूप करता हूं, और अन्य विशेषताओं द्वारा ट्रैपेज़ॉयड को अलग करने का प्रयास करता हूं, क्योंकि मुझे वास्तव में यकीन नहीं है कि मैं कैसे जांच सकता हूं कि रेखाएं ट्रैपेज़ॉयड पर विपरीत हैं। कोई विचार?

मैं जो ट्रैक कर रहा हूं उसका एक उदाहरण यहां दिया गया है: यहां छवि विवरण दर्ज करें

मैं अब तक यही लेकर आया हूं:

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

मेरी आशा थी कि इन समलम्बाकार वस्तुओं की अवतल प्रकृति आयतों/वर्गों की तुलना में विभेदित हो सकेगी। मैं अब सोच रहा हूं कि मुझे किसी तरह साइड एंगल की भी जांच करनी चाहिए।

या उत्तल पतवार लें और कोने के बिंदु खोजें। लेकिन मुझे लगता है कि ओपनसीवी में ऐसा कुछ पहले से ही बनाया गया है? मूल रूप से मैं पूछ रहा हूँ कि मैं क्या याद कर रहा हूँ!

0
Joe Caraccio 23 फरवरी 2020, 06:58
Cv2.approxPolyDP() को docs.opencv.org/4.1 पर देखें .1/d3/dc0/… और geeksforgeeks.org/…। चतुर्भुजों पर सन्निकट आकृति ज्ञात कीजिए। शिखर प्राप्त करें। लाइन खींचना। कोणों और ढलानों की जाँच करें। एक समलम्ब चतुर्भुज एक चतुर्भुज है जिसमें समानांतर पक्षों की केवल एक जोड़ी होती है। एक आयत में 90 डिग्री कोण और समानांतर भुजाओं के दो जोड़े होंगे।
 – 
fmw42
23 फरवरी 2020, 09:42
आपके उदाहरण चित्र में, कौन-सी वस्तुएँ समलम्बाकार हैं और कौन-सी नहीं हैं? (यदि आप उन्हें चित्रित कर सकते हैं तो इससे मदद मिलेगी, साथ ही साथ और उदाहरण भी मिलेंगे)
 – 
Andreas K.
23 फरवरी 2020, 16:37

1 उत्तर

यदि आप contourList और cv2 को परिभाषित करते हैं, और आपके द्वारा आयात किए जाने वाले पैकेजों की पहचान करते हैं, तो मेरे सुझाव अधिक निर्देशित हो सकते हैं।

बस एक ट्रैपेज़ॉयड के साथ काम करना, मैं ट्रैपेज़ॉयड फीचर का उपयोग करने का सुझाव दूंगा: विपरीत रेखाओं का एक सेट समानांतर होता है और दूसरा सेट नहीं होता है। इसके लिए चार रेखाओं के ढलानों को जानना आवश्यक है। यदि आप उन ढलानों को सीधे नहीं जानते हैं, लेकिन आप शीर्षों को जानते हैं, तो आप चार ढलानों की गणना कर सकते हैं।

अनिवार्य रूप से, एक ट्रैपेज़ॉयड की परिभाषा का उपयोग करना मजबूत है, और ऐसे कई तरीके हैं जिनसे आप समानांतर और गैर-समानांतर निर्धारित कर सकते हैं।

0
David Collins 23 फरवरी 2020, 07:29