OpenCV cv2.HoughCircles обнаруживает плохие результаты на легкой картинке - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в opencv и пытаюсь определить круг с помощью HoughCircles, но он дает мне круги там, где их нет, и не обнаруживает огромный очевидный круг, который я хочу. Я попытался изменить параметры, но не могу заставить его работать хорошо. Что я делаю не так?

Исходное изображение: Original Image

Изображение после установки порога: Image After Thresholding

Канни, отфильтрованный с кругами: enter image description here

path=r"minimap.png"
screen = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original', screen)

ret,screen = cv2.threshold(screen,200,255,cv2.THRESH_BINARY)
cv2.imshow('Thresholded', screen)

P=50
can = cv2.Canny(screen,P/2,P)
cv2.imshow('Canny', can)

if 1:
    circles = cv2.HoughCircles(screen, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=P, param2=53, minRadius=0, maxRadius=0)
    print(circles)

    circles = np.uint16(np.around(circles))
    can=cv2.cvtColor(can,cv2.COLOR_GRAY2RGB)
    for i in circles[0,:]:
        # draw the outer circle
        cv2.circle(can, (i[0], i[1]), i[2], (0, 255, 0), 3)
        # draw the center of the circle
        cv2.circle(can, (i[0], i[1]), 2, (0, 0, 255), 5)

cv2.imshow('Circles', can)
cv2.waitKey()

1 Ответ

0 голосов
/ 29 июня 2018

Вы должны поиграть с параметрами cv2.HoughCircles, и я не думаю, что одинаковые значения дадут хорошие результаты для всех изображений. Для вашего изображения:

image = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7,7), sigmaX=-1, sigmaY=-1)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, rows / 2,
                   param1=130, param2=100,
                   minRadius=0, maxRadius=0)

result

...