Фазовий простір Хафа для кола визначається трьома параметрами -- центром кола $(x,y)$ і радіусом кола $R.$ Відповідні накопичення відбуваються у 3D-масиві.
Функція OpenCV для виявлення кіл -- cv2.HoughCircles:
circles=cv2.HoughCircles (image, method, dp, minDist, param1 = 100, param2 = 100, \
minRadius = minRadius, maxRadius = maxRadius)
де
- circles: вектор знайдених кіл у форматі $(x, y, radius)$
- image: вхідне напівтонове зображення.
- method: cv2.HOUGH_GRADIENT
- dp: відношення роздільної здатності акумулятора до роздільної здатності зображення. Наприклад, якщо $dp = 1$, акумулятор має таку ж роздільну здатність, що і вхідне зображення. Якщо $dp = 2$, акумулятор має вдвічі меншу ширину та висоту.
- minDist: мінімальна відстань між центрами виявлених кіл. Якщо параметр занадто малий, на додаток до істинного може бути помилково виявлено кілька сусідських кіл. Якщо він занадто великий, деякі кола можуть бути пропущені.
- param1: це найвищий поріг який використовувався в детекторі Кенні ( якщо використовувався).
- param2: поріг накопичувача для центрів кіл на етапі виявлення. Чим він менший, тим більше помилкових кіл може бути виявлено.
- minRadius: мінімальний радіус кола.
- maxRadius: максимальний радіус кола.
img=cv2.imread('file.jpg')
copy = img.copy()
img_gray=cv2.cvtColor(copy,cv2.COLOR_BGR2GRAY)
#img_blur = cv2.medianBlur(img_gray, 5) - при потребі
circles = cv2.HoughCircles(img_gray, cv2.HOUGH_GRADIENT, 1.4, 40, param1=150, param2=50, minRadius=60, maxRadius=100)
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(copy, (i[0], i[1]), i[2], (0, 255, 0), 3)
#кількість монет
print(len(circles[0]))
Немає коментарів:
Дописати коментар