Powered by Blogger.

Wednesday, April 20, 2005

OpenCV I - Highgui

En este tutorial vamos ha explicar como comenzar ha trabajar con openCV, que es una librería de programación para visión por computador. Vamos a introducir la creación de ventanas en openCV, así como la carga de un archivo de imagen.

Para la creación de una ventana basta con llamar a la siguiente función:

int cvNamedWindow(const char* name, unsigned long flags);

A la que se le pasa como name una cadena de caracteres que identificará de froma única a nuestra ventana y servirá como titulo de nuestra ventana también. El segundo parametro define las propiedades de la ventana, CV_WINDOW_AUTOSIZE o 1 para ajustar la ventana a la imagen mostrada o 0 en otro caso.

Una vez creada nuestra ventana, o ventanas para cargar una imagen simplemente debemos llamar a la función:

IplImage* cvLoadImage( const char* filename, int iscolor CV_DEFAULT(1));

Que como primer parámetro le pasaremos una cadena de caracteres de la imagen que queremos cargar, y como segundo parámetro un valor entero mayor que 0 si queremos que la imagen se carge con 3 canales (rojo, verde y azul), igual a 0 si queremos que se carge con un canal, en escala de grises, o menor que 0 si queremos que se carge según la cabecera del archivo. Los archivos soportados por OpenCV son: Windows bitmaps - BMP, DIB; JPEG files - JPEG, JPG, JPE; Portable Network Graphics - PNG; Portable image format - PBM, PGM, PPM; Sun rasters - SR, RAS; TIFF files - TIFF, TIF. El valor que devuelve esta función es un puntero a una estructura de una imagen (IplImage).

Solo nos falta mostrar una imagen en nuestra ventana que hemos creado, esto se realiza de forma simple con la llamada a la función:

void cvShowImage( const char* name, const CvArr* image );

En la que se le pasa como primer parámetro una cadena de carácteres que identifican a la ventana donde queremos mostrar la imagen y como segundo parámetro la imagen que queremos mostrar.

En el siguiente ejemplo vamos a cargar la misma imagen en rgb y en escala de grises y mostrarlas en dos ventanas distintas, el resultado lo podemos ver en la figura 1:
#include "highgui.h"

#define ventana "Ventana1"

#define ventana1 "Ventana2"
int main(int argc, char* argv[])

{
//Comprobamos si han pasado una image como parametro, sino una por defecto

char* filename = argc >= 2 ? argv[1] : (char*)"lena.jpg";

//cargamos la imagen en RGB

IplImage* imagen;

//(archivo,int a) a>0:RGB; a=0:Escala Grises; a<0:la de la imagen

imagen=cvLoadImage(filename,1);

//Cargamos la imagen en Escala de grises

IplImage* imagen1;

//(archivo,int a) a>0:RGB; a=0:Escala Grises; a<0:la de la imagen

imagen1=cvLoadImage(filename,0);

cvNamedWindow(ventana,0);

cvNamedWindow(ventana1,0);

//Mostramos la imagen en la ventana

cvShowImage(ventana,imagen);

cvShowImage(ventana1,imagen1);

for(;;)

{
int key;

key = cvWaitKey(0);

if( key == 27 || key == 'q' || key == 'Q' ) // 'ESC', q o Q
break;


}

cvDestroyAllWindows();//Destruimos todas las ventanas

return 0;

}

figura 1
Figura 1 Published: By: David Millán Escrivá - 5:11 PM