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.
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.
Por ultimo dibujamos los círculos que encontramos en la imagen
En rojo se muestra el área circular encontrada y en verde el centro del circulo.
Descargar Detector de círculos
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); }
En rojo se muestra el área circular encontrada y en verde el centro del circulo.
Descargar Detector de círculos
me pone error en esta parte con la primera i
ResponderEliminarfor ( size_t i = 0; i < circles.size(); i++ ) {
Point center(cvRound(circles[i][0]),
cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
Recuerda que esto es c++, debe sobrar en el for size_t, debe ser solo i
Eliminari=0
Eliminar