Los principios de la detección del círculo Hough y la detección de la línea Hough son similares. Para los círculos, se expresan como C: (x, y, r) en el sistema de coordenadas de parámetros.
función:
Imgproc.houghcircles (imagen MAT, MAT Circuits, int Method, Double DP, Double Mindist, Double Param1, Double Param2, Int Minradius, Int Maxradius)
Descripción del parámetro:
Imagen: imagen de origen
Círculos: el vector de salida del círculo detectado (x, y, r)
Método: El método de detección utilizado, actualmente solo hay un imgproc.hough_gradient
DP: el inverso de la relación entre la imagen del acumulador en el centro del círculo y la imagen fuente
Mindist: distancia mínima entre los centros del círculo detectado
Param1: los parámetros correspondientes del método de detección establecido por método. Para Hough_gradient, indica el umbral alto del operador de detección de borde (el umbral bajo es la mitad del umbral alto), y el valor predeterminado es 100
Param2: Los parámetros correspondientes del método de detección establecido por método son para Hough_gradient, lo que indica el valor umbral del acumulador. Cuanto menor sea el valor, el círculo no relacionado detectado
Minradius: el radio mínimo del radio del círculo, el valor predeterminado es 0
Maxradius: el radio máximo del radio del círculo, predeterminado a 0 (si tanto Minradius como Maxradius son predeterminados a 0, la función Houghcircles calculará automáticamente el radio)
Código de muestra:
public static void main (string [] args) {system.loadLibrary (core.native_library_name); Mat src = imgcodecs.imread ("f: //websbook_com_1589226.jpg"); Mat dst = src.clone (); Imgproc.cvtcolor (src, dst, imgproc.color_bgr2gray); Círculos de mat () Mat (); Imgproc.houghcircles (dst, círculos, imgproc.hough_gradient, 1, 100, 440, 50, 0, 345); // imgproc.houghcircles (dst, círculos, imgproc.hough_gradient, 1, 100, // 440, 50, 0, 0); for (int i = 0; i <circles.cols (); i ++) {double [] vcircle = circles.get (0, i); Centro de puntos = nuevo punto (vcircle [0], vcircle [1]); int radio = (int) math.round (vcircle [2]); // Circle Center imgproc.circle (Src, Center, 3, nuevo escalar (0, 255, 0), -1, 8, 0); // Circle deliclo imgproc.circle (Src, Center, Radius, nuevo escalar (0, 0, 255), 3, 8, 0); } Imgcodecs.imwrite ("f: //dst2.jpg", src); }Imagen de origen:
Imagen de salida:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.