Beruflich Dokumente
Kultur Dokumente
Artificial
Deteccin de Objetos
Deteccin de Crculos
Del mismo modo como detectamos las lneas en una
imagen opencv cuenta con funciones para detectar
los crculos HoughCircles, en este caso la funcin
nos devolver el punto central del circulo (x,y) y el
radio del mismo r.
Con el siguiente cdigo lo que hacemos es convertir
la imagen a escala de grises y luego aplicar
GaussianBlur para reducir la deteccin de crculos
no existentes.
cvtColor(img, gray, CV_BGR2GRAY);
GaussianBlur( gray, gray, Size(9, 9), 2, 2 );
Deteccin de Crculos
Luego aplicamos el mtodo Houg Circle Transform con
los siguiente parmetros, donde el primero es la
imagen a analizar y el segundo es donde se
almacenaran los datos de los crculos encontrados,
gary.rows / 2 indica la distancia mnima entre los
centros.
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray.rows/2,
200, 100 );
Deteccin de Crculos
Por ultimo dibujamos los crculos 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);
}
Para
Debe
Los
tener 4 vrtices.
Para
Para
Mas
de 6 vrtices.
Tener
Caso de Aplicacin
Deteccin de Color y Distancia
Obsrvese el siguiente caso, un pequeo
robot NXT de lego, que encuentra en su
camino 2 esferas de diferente color,
deber de reconocer la esfera roja y
calcular la distancia que existe entre la
marca verde que maneja y el centro de la
esfera, la tarea a realizar consiste en:
1.Adquirir
2.Buscar
la imagen.
imagen.
3.Calcular
4.Buscar
imagen.
5.Calcular
del NXT.
6.Calcular
distancia.
Caso de Aplicacin
1). Adquirir la Imagen
Esto se puede realizar gracias a la clase cvCapture de OpenCV, el
cdigo seria como sigue:
CvCapture* captura;
captura = cvCaptureFromCAM(0);
IplImage* frame = cvQueryFrame(captura);
Caso de Aplicacin
2). Buscar los puntos del mismo color
Para detectar un objeto de determinado color necesitaremos detectar
todos los pxeles que lo componen. Para ello iremos buscando en todos
los pxeles de la imagen, calculando si son o no del color deseado. Como
sabemos si por ejemplo es rojo?. En primer lugar tenemos que ver qu
datos caractersticos tiene dicho color. En este caso es sencillo, su dato
ms caracterstico ser que el canal con mayor valor ser el del
rojo(Recuerde que una imagen tiene 3 canales Red Green y Blue).
Tambin deberamos tener en cuenta que los valores de los
dems canales no deberan ser muy altos, por lo menos no lo
suficiente como para acercarse al valor del canal del rojo, ya que estos
valores podran corresponder a colores como el morado o el naranja.
Con un color que no sea de los tres bsicos la cosa se complica un poco;
en este caso lo mejor es abrir la imagen con un editor de imgenes (el
Paint por ejemplo), y mirar que valores RGB tienen los pxeles del color
deseado. As podremos sacar las caractersticas que nos determinarn
dicho color.
Caso de Aplicacin
3). Calcular el Centro del Objeto
Una vez tengamos todos los pxeles del objeto podemos hacer varias
cosas: podramos cambiar de color los pxeles y mostrar la imagen
resultante por pantalla para ver si ha detectado bien el objeto:
Podemos adems llevar un contador de cuantos pxeles llevamos, y
una suma de sus posiciones, lo que nos servira para calcular lo que
sera el punto medio de nuestro objeto. Ests coordenadas del punto
medio sern bastante precisas si contamos con una gran cantidad de
pxeles del objeto, y nos ser de gran utilidad para emplazar dicho
objeto con respecto al robot NXT.
Caso de Aplicacin
4). Calcular la posicin del objeto respecto al robot NXT
Teniendo el punto medio del objeto calculado anteriormente el
proceso es sencillo. Ponemos a nuestro robot algo de color distintivo
en la punta, como el ladrillo verde que hemos puesto al nuestro.
Calculamos el punto medio de dicha punta verde, tal y como lo hemos
hecho para la bola roja. Una vez tenemos las coordenadas sabemos si
el objeto se encuentra a nuestra izquierda o derecha, y arriba o abajo
de nuestro robot. Adems podemos hallar la distancia al objeto (en
pxeles) mediante la famosa formula de traslacin de coordenadas.
Caso de Aplicacin
Captura del Aplicativo