Top Ad unit 728 × 90

Recientes

recent

Curso OpenCV y C++ con Visual Studio 2013 (8-25) - Detectar Círculos en OpenCv

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 );

Utilizaremos el método Houg Circle Transform:
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, gray.rows/15);
Una pequeña explicación de los argumentos:
gray: la imagen de entrada (escala de grises)
círcles: Un vector que almacena conjuntos de 3 valores: "x, y, r" para cada círculo detectado.
cv.CV_HOUGH_GRADIENT: Definimos el método para la detección.
dp = 1: La relación inversa de la resolución.
min_dist = gray.rows / 15: Distancia mínima entre ejes detectados.


Borde del círculo de color rojo y su radio de color verde.

Código: Ejemplo de Detectar círculos en OpenCv 3.0 y C++
// CursoOpenCV2410.cpp: Juan Carlos Arcila Díaz.

#include "stdafx.h"
#include "opencv2\opencv.hpp"

using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
      //Declaramos un onjeto Mat para almacenar la imagen a escala de grises
      Mat gray;
      //Leemos la imagen de disco
      Mat img = imread("D:\\pruebaopencv\\circulos.jpg");

      if (img.empty())
      {
            return -1;
      }

      //Convertimos la imagen img a escala de grises y la almacenamos en el objeto gray
      cvtColor(img, gray, CV_BGR2GRAY);
      //Aplicamos Gaussian Blur
      GaussianBlur( gray, gray, Size(9, 9), 2, 2 );

      //Declaramos el vector para almacenar las características de los círculos encontrados
      vector circles;
      HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, gray.rows/15);

      //Dibujamos el borde de los círculos encontrados y también su radio
      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);
      }
      //Mostramos la imagen con los bordes y el radio señalados
      imshow( "Circulos", img );
      cvWaitKey();
      //Destruímos la ventana
      cvDestroyWindow("Circulos");

}
//

Saludos Imperio, un abrazo a la distancia!
Curso OpenCV y C++ con Visual Studio 2013 (8-25) - Detectar Círculos en OpenCv Reviewed by Juan Carlos Arcila Díaz on 19:05 Rating: 5

No hay comentarios:

All Rights Reserved by www.IncanatoIT.com - Desarrollando Software © 2014 - 2015
Powered By Blogger, Designed by Sweetheme

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

IncanatoIt.com. Con la tecnología de Blogger.