user14062613
user14062613

Reputation:

How to automatically detect the correct circles in an image

enter image description here

I have an image like above and I want to detect the circle like in the below image in blue enter image description here

However, when I do, enter image description here the red circle is detected.
enter image description here
How would I automatically detect blue circle instead of the red? (without going through every single circular contour)

Upvotes: 2

Views: 768

Answers (1)

Prabhat Kumar Sahu
Prabhat Kumar Sahu

Reputation: 994

This code below will give you multiple circles when you pass the image. Also, it will give you the count. You can edit it out later on.

import cv2

image = cv2.imread('image.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,27,3)

cnts = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
count = 0
for c in cnts:
    area = cv2.contourArea(c)
    x,y,w,h = cv2.boundingRect(c)
    ratio = w/h
    ((x, y), r) = cv2.minEnclosingCircle(c)
    if ratio > .85 and ratio < 1.20 and area > 50 and area < 120 and r < 7:
        cv2.circle(image, (int(x), int(y)), int(r), (36, 255, 12), -1)
        count += 1

print('Count: {}'.format(count))

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()

Upvotes: 1

Related Questions