मुझे सर्कल क्षेत्रों का पता लगाने में समस्याएं आ रही हैं। मैंने इसे opencv से HoughCircles फ़ंक्शन के साथ करने की कोशिश की। हालांकि भले ही छवियां बहुत समान हैं, मूर्तियों के पता लगाने के लिए मज़े के लिए पैरामीटर अलग-अलग होना चाहिए।पायथन ओपनसीवी - ब्लोब डिटेक्शन या सर्कल डिटेक्शन
मैंने कोशिश की एक और दृष्टिकोण हर पिक्सेल पर फिर से शुरू करना था और जांचें कि वर्तमान पिक्सेल सफेद है या नहीं। यदि यह मामला है तो जांच करें कि क्षेत्र में ब्लॉब ऑब्जेक्ट है (थ्रेसहोल्ड से छोटे ब्लॉब सेंटर की दूरी)। यदि वहां है, तो पिक्सेल को ब्लॉब में संलग्न करें, यदि नहीं तो एक नया ब्लॉब बनाएं। यह भी ठीक से काम नहीं किया।
क्या किसी को यह पता है कि मैं यह काम कैसे कर सकता हूं (9 0% पहचान)? मैंने एक उदाहरण छवि और एक और छवि संलग्न की जहां मैंने cirles चिह्नित किया। धन्यवाद!
अद्यतन: अब तक मदद के लिए धन्यवाद! इस कोड को जहाँ मैं आकृति को प्राप्त करने और क्षेत्र के हिसाब से उन्हें फ़िल्टर है:
im = cv2.imread('extract_blue.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
im_gauss = cv2.GaussianBlur(imgray, (5, 5), 0)
ret, thresh = cv2.threshold(im_gauss, 127, 255, 0)
# get contours
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours_area = []
# calculate area and filter into new array
for con in contours:
area = cv2.contourArea(con)
if 1000 < area < 10000:
contours_area.append(con)
यह सुंदर स्वच्छ काम करता है। मैं उन्हें छवि पर आकर्षित किया:
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/perimeter*perimeter)
print circularity
if 0.8 < circularity < 1.2:
contours_cirles.append(con)
हालांकि, नई सूची 'contours_cirles':
यह हिस्सा है जहाँ मैं घेरा द्वारा फ़िल्टर है, यह सीधे कोड, जहां मैं क्षेत्र के आधार पर फ़िल्टर नीचे चला जाता है खाली है। मैं पाश में 'घेरा' मुद्रित और मूल्यों सब के बीच 10 000 और 100 000.
अद्यतन # 2 हैं: लापता कोष्ठक यह अब काम कर रहा है ठीक करने के बाद !
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/(perimeter*perimeter))
print circularity
if 0.7 < circularity < 1.2:
contours_cirles.append(con)
बहुत बहुत धन्यवाद! :)
बहुत पुराना कोड। लेकिन आप इसे देख सकते हैं। https://github.com/bipul21/ रंगीन- बॉल- –
'(क्षेत्र/परिधि * परिधि) 'यह मेरे लिए अजीब लग रहा है। क्या आप वाकई किसी भी ब्रैकेट को नहीं भूल गए हैं? – Moritz
हाँ, आप सही हैं। परिपत्र = 4 * math.pi * (क्षेत्र/(परिधि * परिधि)) – cmplx96