Хотя обнаружение кругов удаляет ненужные круги
Я получаю много кругов, используя алгоритм обнаружения крутых кругов на изображении. как сделать это обнаружение более точным?
изображение, показывающее обнаруженные круги.
оригинальная картинка
СЛЕДУЮЩИЙ КОД ИСПОЛЬЗУЕТСЯ
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
Вы должны ограничить радиусы. Поскольку преобразование Хафа является более или менее подходом грубой силы, это очень важно. Это значительно сокращает время расчета и, конечно, вы можете и должны использовать это, чтобы получить только те круги радиусов, которые вы ищете...
Устанавливая минимальное расстояние между кругами, вы избегаете получения нескольких результатов для одного круга.
Как всегда, знание является ключом к успеху.