- Прочитал изображение и перешел на оттенки серого.
- Применил медиану.
- Применил обнаружение осторожных краев.
- Применены круги Хафа.
Исходное:

Медиана:

Canny:

Обнаруженный круг:

Проблема: Как вы можете видеть на последнем изображении, он обнаруживает круги и находится немного далеко от исходной оси. Есть ли какие-либо другие параметры, которые мне нужно изменить или учесть?
Код
import cv2
import numpy as np
def readAndResize(image,a):
imag = cv2.imread(image,a)
org = cv2.imread(image)
#resixe the image
small = cv2.resize(imag, (0,0), fx=0.3, fy=0.3)
small2 = cv2.resize(org, (0,0), fx=0.3, fy=0.3)
height, width = small.shape
img = small[height - height/3:height,0:width]
org2 = small2[height - height/3:height,0:width]
return img, org2
img,org2 = readAndResize('5.jpg',0)
cv2.imshow('Original',org2)
gray = cv2.cvtColor(org2, cv2.COLOR_BGR2GRAY)
med = cv2.medianBlur(gray,5)
canny = cv2.Canny(med,100,50)
circles = cv2.HoughCircles(canny,cv2.HOUGH_GRADIENT,1,92,20,10,minRadius=4,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(org2,(i[0],i[1]),i[2],(0,255,0),2)
cv2.circle(org2,(i[0],i[1]),2,(0,50,255),3)
cv2.imshow('Median',med)
cv2.imshow('canny',canny)
cv2.imshow('Detected',org2)
cv2.waitKey(0)
cv2.destroyAllWindows()
Подробнее здесь: https://stackoverflow.com/questions/439 ... -detection
Мобильная версия