Хотя обнаружение кругов удаляет ненужные круги

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

изображение, показывающее обнаруженные круги.

оригинальная картинка

СЛЕДУЮЩИЙ КОД ИСПОЛЬЗУЕТСЯ

import cv2
import numpy as np

img = cv2.imread('test_c.jpg',0)

img = cv2.medianBlur(img,5)

cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:

    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('detected circles',cimg)

cv2.waitKey(0)

cv2.destroyAllWindows()`

1 ответ

Вы столкнулись с этой проблемой, потому что вы не знаете, как работает Hough transform, и потому что вы не читали внимательно код, который вы, скорее всего, нашли где-то в Интернете, и не обращались к справочной документации OpenCV.

https://en.wikipedia.org/wiki/Circle_Hough_Transform

http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html?highlight=houghcircles

Вы должны ограничить радиусы. Поскольку преобразование Хафа является более или менее подходом грубой силы, это очень важно. Это значительно сокращает время расчета и, конечно, вы можете и должны использовать это, чтобы получить только те круги радиусов, которые вы ищете...

Устанавливая минимальное расстояние между кругами, вы избегаете получения нескольких результатов для одного круга.

Как всегда, знание является ключом к успеху.

Другие вопросы по тегам