OpenCV Detectar Círculos

Del mismo modo como detectamos las líneas en una imagen opencv cuenta con funciones para detectar los círculos HoughCircles, en este caso la función nos devolverá el punto central del circulo (x,y) y el radio del mismo r.

Con el siguiente código lo que hacemos es convertir la imagen a escala de grises y luego aplicar GaussianBlur para reducir la detección de círculos no existentes.

cvtColor(img, gray, CV_BGR2GRAY);
GaussianBlur( gray, gray, Size(9, 9), 2, 2 );

Aplicamos el método Houg Circle Transform con los siguiente parámetros, donde el primero es la imagen a analizar y el segundo es donde se almacenaran los datos de los círculos encontrados, gary.rows / 2 indica la distancia mínima entre los centros.

vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT,
              2, gray.rows/2, 200, 100 );

Por ultimo dibujamos los círculos que encontramos en la imagen

 for ( size_t i = 0; i < circles.size(); i++ ) {
     Point center(cvRound(circles[i][0]),
                  cvRound(circles[i][1]));
     int radius = cvRound(circles[i][2]);
 
     circle( img, center, 3, Scalar(0,255,0), 3);
     circle( img, center, radius, Scalar(0,0,255), 3);
 }

Detector opencv de circulos
En rojo se muestra el área circular encontrada y en verde el centro del circulo.

Descargar Detector de círculos

Comentarios

  1. me pone error en esta parte con la primera i

    for ( size_t i = 0; i < circles.size(); i++ ) {
    Point center(cvRound(circles[i][0]),
    cvRound(circles[i][1]));
    int radius = cvRound(circles[i][2]);

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Detección de figuras geométricas