4_14_ Transformación del círculo de Hough: documentación oficial china de OpenCV
Aprenda a usar la transformada de Hough para encontrar círculos en imágenes. - Veremos la siguiente función: cv.HoughCircles ()
teoría
Un círculo se representa matemáticamente como , donde (xcenter, ycenter) es el centro del círculo y r es el radio del círculo. A partir de la ecuación, podemos ver que tenemos 3 parámetros , por lo que necesitamos un acumulador 3D para la transformada de Hough , que será muy ineficiente. Por lo tanto, OpenCV utiliza un método más complicado, el método de gradiente de Hough que utiliza la información de gradiente del borde (el gradiente de Hough debe prestar más atención para comprenderlo).
La función que usamos aquí es **cv.HoughCircles**(). Tiene muchos parámetros que están bien explicados en la documentación. Así que vayamos directamente al código.
import numpy as np import cv2 as cv img = cv.imread('opencv-logo-white.png',0) img = cv.medianBlur(img,5) cimg = cv.cvtColor(img,cv.COLOR_GRAY2BGR) circles = cv.HoughCircles(img,cv.HOUGH_GRADIENT,1,20, param1=50,param2=30,minRadius=0,maxRadius=0) circles = np.uint16(np.around(circles)) for i in circles[0,:]: # 绘制外圆 cv.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) # 绘制圆心 cv.circle(cimg,(i[0],i[1]),2,(0,0,255),3) cv.imshow('detected circles',cimg) cv.waitKey(0) cv.destroyAllWindows()
El resultado es el siguiente: