Está en la página 1de 14

TUTORIAL Y EJEMPLOS PARA EL MANEJO DE LAS LIBRERIAS OPENCV

1.0 CON DEV-C++ 4.9.9.2.

Francisco Daniel Usama

COMO INSTALAR DEV-C++ 4.9.9.2.

COMO INSTALAR LAS LIBRERIAS OPENCV 1.0.

Instalar opencv puede conseguirse su última versión en www.sourceforge.com


este manual usa la versión 1.0 y al momento de la instalación, seleccionar:

Add <…>\Opencv…..system PATH

Instalar devcpp. En este manual se explican los procedimientos de


configuración para la versión 4.9.9.2, sin embargo cualquier versión 4.9.x.x
debería servir.

En el momento de la instalación, seleccionar todas las opciones por defecto, es


recomendable reiniciar el PC al terminar de instalar devcpp sobretodo si se
instalo Opencv y Devcpp al mismo tiempo.

Pasos de configuración de DevCpp:

Se supuso en este manual que Opencv quedo el la ruta por defecto C:\Archivos
de programa\OpenCV en caso de no estar ahí, cambie esta ruta por la de su
sistema.

-Primero: en el menú Herramientas -> Opciones del Compilador


-De click en “ ”add a new compiler set

-En el cuadro de dialogo “Nuevo compilador” de el nombre de este sugerimos


OPENCV y después en OK.
Seleccione la opción

Y escriba a continuación dependiendo de su sistema:

NOTA, cambie Program Files por Archivos de programa dependiendo de


su configuración en TODAS las rutas que se muestran en este manual,
por defecto se va a usar C:\Program Files\ como root de Opencv.

Windows vista en español o ingles ó Xp en ingles:

-L"C:\Program Files\OpenCV\lib" -lhighgui -lcxcore -lcv -lcvcam -lml –lcvaux

Windows Xp en español

-L"C:\Archivos de programa\OpenCV\lib" -lhighgui -lcxcore -lcv -lcvcam -lml –


lcvaux

Los anteriores comandos incluyen en su inicio una “ele” L mayúscula al


principio y minuscula al listar las librerías después de el separador -.
-Dar clik en la pestaña Directorios:

Y listar el siguiente:

C:\Archivos de programa\OpenCV\bin
-Después de clik en la subpestaña Bibliotecas y liste :

C:\ Archivos de programa \OpenCV\lib

C:\ Archivos de programa \OpenCV\otherlibs\highgui


-De click en la subpestaña “Includes C” y liste:

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\cvaux\include

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\ml\include

C:\Program Files\OpenCV\otherlibs\cvcam\include

C:\Program Files\OpenCV\otherlibs\highgui

Repita el mismo proceso en “Includes C++” en caso que desee compilar


también “.cpp”
De clic en aceptar “ ” y con esto queda terminada la configuración de
DevC++

1. TIPOS DE DATOS EN OPENCV

1.1. CvPoint

Este tipo de dato permite almacenar dos enteros. Para declarar una variable de
este tipo se procede así:

CvPoint aux;

Para definir una variable CvPoint se procede:

Aux=cvPoint(15,65);

Coordenadas de un punto (un píxel) en una imagen. La numeración de filas y


columnas empieza en 0.

1.2. CvSize.

Tamaño de una región rectangular, en píxeles.

Declaración.

CvSize variable;

Definición.

Variable=cvSize(100,50);
1.3. IplImage.

El tipo de datos para representar imágenes es el tipo IplImage.

Las imágenes se guardan descomprimidas, como una matriz de píxeles que


podemos consultar y modificar.

• Principales propiedades de una imagen:


– Tamaño (size): anchura (width) y altura (height).
– Profundidad de píxeles (depth): enteros de 8, 16 y 32 bits,
reales de 32 y 64 bits.
– Número de canales (nChannels): 1, 2, 3 ó 4.
– Origen de coordenadas (origin): top-left, bottom-left; y orden de
los canales (dataOrder): entrelazado de píxeles (0) o por canales
(1).
– Las variables manejadas serán punteros a IplImage
Declaración de una variable IplImage.

IplImage* imagen;

Nota: Después de declarada ya se puede enviar a la variable (en este caso


imagen) una imagen.

2. FUNCIONES PARA DIBUJAR CIRCULOS, ELIPSES,

2.1. cvCircle.

void cvCircle (IplImage* img, CvPoint center, int radius, CvScalar color, int
hickness=1);

Parametros de entrada.

 Img=imagen donde se va hacer el circulo. Esta imagen se debe definir


antes de usar la función cvCircle.
 Center=coordenadas del centro del circulo. para esto se debe utilizar el
tipo de dato Cvpoint,el cual se puede definir dentro de la función cvcircle
o externamente.
 Radius=radio del circulo en pixeles.
 Color=color del circulo, se define con un Cvscalar o con la macro
CV_RGB(r, g, b).
 Hickness=indica el grosor de la línea que dibuja el circulo.

El tipo de dato devuelto es un void.

Ejemplo: se crea un círculo de radio 10, de color negro en una imagen en


blanco.

#include "cv.h"
#include "highgui.h"
#include <stdio.h>

char name0[]="blanco.jpg"; // se define el fichero a cargar


int main()
{CvPoint aux; //se define una variable aux de tipo CvPoint
IplImage* imagen=NULL;//inicializo imagen
imagen=cvLoadImage(name0,1);// cargamos la imagen
aux=cvPoint(15,15); //se le asigna a aux las coordenadas(15,15)
cvCircle(imagen,aux,10, CV_RGB(0,0,0),10);
cvNamedWindow( "test", 0); // creamos la ventana de nombre "test"
cvShowImage( "test", imagen); // representamos la imagen en la ventana
cvSaveImage("saliendo.jpg",imagen); // guardamos la imagen
cvWaitKey(0); // se pulsa tecla para terminar
cvDestroyAllWindows(); // destruimos todas las ventanas
cvReleaseImage(&imagen);
return 0;
}

Nota: si se quiere utilizar cvScalar en lugar de la macro ,entonces se reemplaza


CV_RGB(0,0,0) por cvScalar(0,0,0).si cambia los valores de estas funciones
cambia el color del circulo.

3. FUNCIONES PARA CREAR Y MOSTRAR IMÁGENES POR PANTALLA.

3.1. Crear de una imagen.

IplImage* cvCreateImage(CvSize size, int depth, int channels)

– size: tamaño de la imagen


– depth: profundidad de píxel:
• IPL_DEPTH_8U - unsigned 8-bit integers
• IPL_DEPTH_8S - signed 8-bit integers
• IPL_DEPTH_16S - signed 16-bit integers
• IPL_DEPTH_32S - signed 32-bit integers
• IPL_DEPTH_32F - single precision floating-point numbers
• IPL_DEPTH_64F - double precision floating-point numbers
– channels: número de canales: 1, 2, 3 ó 4
– Implícitamente, el origen es top-left y el orden es entrelazado.
Con imágenes RGB el orden es: b0, g0, r0, b1, g1, r1, ...

3.2. cvNamedWindow.

Con esta function se crea una ventana,esto se debe hacer para luego mostrar
una imagen en esta ventana.

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

Parámetros de entrada.
 name: nombre de la ventana a crear.
 flags: 0 = se puede modificar el tamaño de la ventana; 1 = no se puede
modificar el tamaño.

Ejemplo:

cvNamedWindow("ventana",0);

Note que el nombre de la ventana esta entre comillas, esto se debe a que el
parámetro name es de tipo carácter.

3.3. Destruir una ventana.

int cvDestroyWindow (const char* name)


 name: nombre de la ventana a destruir.

3.4. Mostrar una imagen en una ventana.

void cvShowImage (const char* name, const IplImage* image)


 name: nombre de la ventana a usar.
 image: imagen a mostrar.

3.5. Cambiar el tamaño de una ventana.

void cvResizeWindow (const char* name, int width, int height)

name: nombre de la ventana a redimensionar.

Width =ancho de la nueva imagen.

Height=altura de la nueva imagen.

Ejemplo:

cvResizeWindow("ventana",20,20);

3.6. Esperar pulsación de una tecla.

int cvWaitKey (int delay= 0)


– delay: tiempo máximo de espera, en milisegundos. Si es menor o
igual que 0, espera indefinidamente.
– Devuelve el código de la tecla, o -1 si no se pulsó ninguna.

3.7. Liberar una imagen.


void cvReleaseImage (& image)
– image: imagen a liberar, ojo es un doble puntero.
– Si *image es NULL no hace nada.
3.8. Clonar una imagen.

IplImage* cvCloneImage (const IplImage* image)


 image: imagen a clonar, se devuelve una copia exacta

3.9. Leer una imagen de un fichero.

IplImage* cvLoadImage (const char* name, int iscolor=1)


– name: nombre del fichero a leer.
– iscolor: número de canales en la imagen resultante:
• >0 : la imagen resultante tendrá siempre 3 canales (RGB)
• =0 : la imagen tendrá 1 canal (escala de grises)
• <0 : el número de canales depende del propio fichero
– Formatos admitidos: BMP, DIB, JPEG, PNG, PBM, PGM, PPM,
RAS, TIFF. En HighGUI2 se añade GIF.
Si no se puede leer el fichero, devuelve NULL.

3.10. Guardar una imagen en un fichero.

int cvSaveImage (const char* name, const IplImage* image)


– name: nombre del fichero a escribir.
– image: imagen a guardar.
– Formatos admitidos: BMP, DIB, JPEG, PNG, PBM, PGM, PPM,
RAS, TIFF. En Highgui2 se añade GIF.
– Devuelve 0 si no se puede escribir.
Ejemplo:
cvSaveImage("saliendo.jpg",imagen);

se guarda la imagen en saliendo con formato jpg.

EJEMPLO 1: PROGRAMA PARA CREAR UNA IMAGEN.

#include"highgui.h"

int main ()
{IplImage* imagen=NULL;
CvSize tam;
tam=cvSize(100,100);
imagen=cvCreateImage(tam,IPL_DEPTH_8U,1);
cvNamedWindow("ventana",0);

cvShowImage ("ventana",imagen);
cvResizeWindow("ventana",20,20);
cvWaitKey(0); // se pulsa tecla para terminar
cvDestroyWindow("ventana");
cvReleaseImage(&imagen);

return 0;
}
EJEMPLO 2: PROGRAMA PARA CARGAR UNA IMAGEN DE UN FICHERO,
CLONARLA Y MOSTRARLA EN UNA VENTANA.

#include "highgui.h"

int main()
{IplImage* imagen; //Definiendo los tipos de dato
IplImage* imagen2;
imagen=cvLoadImage("lena.jpg",3); //carga la imagen del fichero
cvNamedWindow("ventana",0); //se crea una ventana
imagen2=cvCloneImage(imagen); //se clona la imagen y se guarda en
imagen2
cvShowImage("ventana",imagen2); //se presenta la imagen en la ventana
cvSaveImage("saliendo.jpg",imagen2); // guardamos la imagen
cvWaitKey(0); //espera la pulsacion de una tecla para terminar
cvDestroyWindow("ventana"); //se destruye la ventana
cvReleaseImage(&imagen); //se libera la imagen
return 0;
}

4. OTRAS FUNCIONES.

4.1. cvGetSize.

CvSize cvGetSize (const CvArr* arr);

Esta function retorna el numero de filas(height) y el numero de columnas


(width) de una matriz o una imagen.

Ejemplo: cvGetSize(imagen),

EJEMPLO 3: PROGRAMA PARA EXTRAER LOS PLANOS RGB DE UNA


IMAGEN.

#include"highgui.h"

int main()
{
IplImage *imagen= cvLoadImage("lena.jpg", 1);
cvNamedWindow("ventana", 0);
cvShowImage("ventana",imagen);
IplImage *canales[3];
char *nombres[3]= {"canalB.jpg", "canalG.jpg", "canalR.jpg"};
int i;
for (i= 0; i<3; i++)
canales[i]= cvCreateImage(cvGetSize(imagen), imagen->depth, 1);
cvSplit(imagen, canales[0], canales[1], canales[2], NULL);
for (i= 0; i<3; i++) {
cvNamedWindow(nombres[i], 0);
cvShowImage(nombres[i], canales[i]);
}
cvWaitKey(0);
for (i= 0; i<3; i++) {
cvSaveImage(nombres[i], canales[i]);
cvReleaseImage(&canales[i]);
}
cvReleaseImage(&imagen);
return 0;
}

5. OPERACIONES SUMA,RESTA, MULTIPLICACION Y DIVISION.

5.1. cvSet.

void cvSet (CvArr* A, CvScalar S, const CvArr* mask=0) à si mask(x,y)≠0


entonces A(x,y):= S.

con esta función se inicializa una imagen a un valor constante.

ejemplo: inicializar una imagen en color verde.


cvSet(imagen, cvScalar(0,255,0),0);

nota=si se quiere inicializar en cero,se puede utilizar:


 cvSet(imagen, cvScalar(0,0,0),0);
 cvSetZero(imagen) ;

5.2. Sumar a una imagen un valor constante.

void cvAddS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)


à si mask(x,y)≠0 entonces C(x,y):= A(x,y) + S

Con esta función se le suma cualquier valor a la imagen.es decir se le suma un


valor constante a cada pixel de la imagen.

Ejemplo: sumar un poco de rojo.


cvAddS(imagen1, cvScalar(0,0,100),imagen1);

Aumentar el brillo (inplace):


cvAddS(img, cvScalarAll(50), img);

5.3. Restar a una imagen un valor constante:

void cvSubS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)


à si mask(x,y)≠0 entonces C(x,y):= A(x,y) – S

Ejemplo. Disminuir el brillo.


cvSubS(img, cvScalarAll(50), img);

5.4. Restar a un valor constante una imagen.


void cvSubRS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
à si mask(x,y)≠0 entonces C(x,y):= S – A(x,y)

Ejemplo. Invertir una imagen (en color o B/N).


cvSubRS(img, cvScalarAll(255), img);

También podría gustarte