You are on page 1of 12

14/11/2010

1
Adquisicin de Imagen en Tiempo Real
(MATLAB y OPENCV)
14/11/2010
2
Cmaras en general
Modo de Exposicin/velocidad de obturacin
(exposure/shutter)
Seleccin de Ganancia (gain) -> Sensibilidad
Balance de blancos y negros (balance or level -AWB)
Modo de disparo (trigger)
Cmaras IP
Tiempo de espera (timeout)
Nmero de intentos/reenvios (attemps/resends)
Mantenimiento del enlace (hearbeat)
Comprobar e inicializar driver de video : imaqhwinfo
Deshacer la inicializacin del driver imaqreset
Obtener informacin del driver: imaqhwinfo(obj)
Descripcin, versin, tamao imagen, formato soportado, etc.
Crear una instancia de video: videoinput(obj)
Inicializa parmetros de adquisicin y de disparo
Comenzar y finalizar adquisicin: start y stop
14/11/2010
3
Obtener propiedades del dispositivo de video escogido
src=getselectedsource(vid) y get(src)
Brillo, contraste, exposicin, saturacin, matiz, etc.
Obtener ayuda sobre propiedad a modificar
imaqhelp(src,propiedad) o imaqhelp(src)
Fijar una propiedad set(vid,propiedad,valor)
Obtener valor de una propiedad get(vid,{propiedad1,
propiedad2})
Adquirir, borrar uno varios frames del buffer imagen
Formato de video y resolucin
Activacin o disparo de la captura de imagen
Gestin de memoria y activacin de ventana de visualizacin
Especificacin de regiones de inters en la imagen: ROI
14/11/2010
4
%Configuracin inicial
adaptador=imaqhwinfo; %Obtener adaptadores de video disponibles que se almacenan en la variable adaptador
i=imaqhwinfo('winvideo'); %Obtener el identificador del adaptador activo y almacenarla en la variable i
id=i.DeviceInfo.DeviceID; %Acceder a la estructura que devuelve imaqhwinfo para mostrar informacin
r=i.DeviceInfo.SupportedFormats; %Obtener las resoluciones y formatos que soporta y almacenarlas en r
vid=videoinput('winvideo',id); %Crear instancia de video para capturar indicando el identificador del adaptador i
%Fijar parmetros de adquisicin
%Escoger frames por disparo y gestin del frame memoria o disco
set(vid, 'FramesPerTrigger', 15, 'LoggingMode', 'memory');
set(vid,'ReturnedColorSpace','rgb'); %Convierte imagen a RGB en caso de que la webcam capture en otro formato
%Comenzar a adquirir imgenes
start(vid);
%Mostrar imagen adquirida
figure('Name','Capturando de la webcam'); %nombre de la ventana
%Visualizar
preview(vid); %mostrar video
%Parar la adquisicin de imgenes
close(vid);
14/11/2010
5
Qu es OpenCV (Open Computer Vision)?
Biblioteca de funciones para C/C++.
Desarrollada en sus inicios por Intel.
Publicada bajo licencia FreeBSD.
Multiplataforma. Puede instalarse y ejecutarse en Windows, Linux y MacOS.
Qu herramientas proporciona?
Estructuras y operaciones bsicas (matrices, vectores, etc.) e Interfaz grfico (GUI)
Ms de 500 algoritmos sobre visin por computador y procesamiento de imagenes,
algunos de ellos con ejemplos de cdigo en C para compilarlos modificarlos y
ejecutarlos en tiempo real.
Documentacin (http://opencv.willowgarage.com/documentation/cpp/)
Wiki (http://opencv.willowgarage.com/wiki/FullOpenCVWiki)
Adquisicin de imagen en tiempo real
Procesamientos bsicos en imagen
Segmentacin de imgenes
Identificacin y reconocimiento de objetos en imagen
Reconocimiento de caras y gestos en imgenes
Anlisis de movimiento y seguimiento objetos
Calibracin de cmaras
Reconstruccin de escenas 3D, clculo de profundidad y posicin
14/11/2010
6
Algunos campos importantes de la estructura:
int nChannels; Nmero de canales (colores).
int depth; Profundidad de pxel. (IPL DEPTH 8U, IPL DEPTH 8S,
IPL DEPTH 16U, IPL DEPTH 16S, IPL DEPTH 32S, IPL DEPTH 32F,
IPL DEPTH 64F)
int width; Anchura de la imagen en pxeles.
int height; Altura de la imagen en pxeles.
int imageSize; Tamao de la imagen en bytes.
char* imageData; Puntero a datos de imagen.
Objeto Imagen (Estructura IplImage)
Funciones:
IplImage* cvLoadImage( const char* nombrefichero, int color=1);
void cvShowImage( const char* nombreventana, const CvArr* imagen );
Parmetros:
nombrefichero: Nombre del fichero de imagen.
color: 0 para leer la imagen en tonos de gris, 1 para color. El valor por defecto es 1.
nombreventana: Nombre de la ventana donde se muestra la imagen
imagen: Puntero a la imagen leida
Funciones para Leer y Mostrar una Imagen
Funciones:
IplImage* cvCreateImage(CvSize tamao, int profundidad, int canales);
int cvSaveImage( const char* nombrefichero, const CvArr* imagen);
IplImage* cvCloneImage(IplImage* imagen);
Parmetros:
tamao: Dimensiones de la imagen
profundidad: (Comprobar objeto IplImage para ver que parmetros se pueden escoger).
canales: Nmero de canales de la imagen (1 en escala de grises, 3 en color)
nombrefichero: Nombre que se le quiere dar al fichero que almacene la imagen
Imagen: Imagen a ser guardada o clonada
Funciones para Crear y Guardar una Imagen
//Leer una imagen de fichero
IplImage * img1 ;
img1 = cvLoadImage (lena.png ", 0);
//Copia la imagen
IplImage * img2 ;
img2 = cvCloneImage ( img1 );
//Graba la imagen copiada
cvSaveImage ( copialena.png,img2);
14/11/2010
7
La imagen se guardan en un vector apuntado por el campo imageData del objeto IplImage.
El vector lee la matriz por filas (al contrario que Matlab, que las almacena por columnas).
Para acceder a los pxeles, la forma ms sencilla es usando las funciones CvGet2D y cvSet2D
Funciones:
CvScalar cvGet2D( const CvArr* imagen, int i, int j );
void cvSet2D( CvArr* imagen, int i, int j, CvScalar nuevo valor);
Parmetros:
imagen: Imagen a la que se quiere acceder
i,j: Posicin a la que se quiere acceder (fila, columna)
nuevo_valor: Valor que se le quiere asignar a un pxel
Funciones para Crear y Guardar una Imagen
//Crear una imagen de 640x480, de 8 bits sin signo, con escala de grises (1)
IplImage * img = cvCreateImage ( cvSize (640 ,480) , IPL_DEPTH_8U ,1);
//Obtener el valor de un pxel en la posicin 100,200
CvScalar s;
s= cvGet2D(img ,100,200);
printf (" Intensidad= %f\n",s. val [0]);
//Asignar el valor de 255 al pxel situado en la posicin 200,300
s. val [0]=255;
cvSet2D(img ,200,300,s);
Los tipos bsicos de manipulacin en OpenCV son los siguientes:
Tipos:
CvPoint Define un punto en una imagen, con coordenadas (u,v)
CvSize Define el tamao en una imagen con dimensiones (anchura, altura)
CvRect Define una porcin rectangular en una imagen indicando origen y
dimensin (u, v, anchura, altura)
CvScaler Define un valor para un pxel RBGA value for a pixel (val[4])
cvMat* - Define una matriz bidimensional en la que se indican (filas, columnas,
tipo_datos)
Funcin:
cvSetImageROI(imagen, cvRect(u,v,anchura,altura));
Tipos de datos bsicos
//Leer una imagen
IplImage* im1;
im1 = cvLoadImage( "MGC.jpg" );
//Determinar el tamao de una regin de inters (punto origen y dimensiones)
int u = 280; int v = 80; int anchura = 60; int altura = 60;
//Fijar una regin rectangular de las dimensiones indicadas anteriormente
cvSetImageROI(im1, cvRect(u,v,anchura,altura));
//Definir un punto de coordenadas
u=100 y v=200
CvPoint pt1;
pt1= cvPoint(100,200);
//Definir el color rojo y asignaro a
un pxel
CvScalar p_rojo ;
p_rojo== CV_RGB(250,0,0);
//Definir una matriz de 5x5 en
coma flotante
CvMat* mat = cvCreateMat( 5, 5,
CV32FC1 );
14/11/2010
8
// Bibliotecas a incluir
#include "cv.h"
#include "highgui.h
#include <stdio.h>
// Programa principal
int main(int argc, char *argv[]) {
{
//Declaracin de variables
IplImage *imagen=0;
IplImage *image_r=0;
//..
//Mostrar imgenes
cvNamedWindow("Imagen Original",1);
cvShowImage("Imagen Orginal",imagen);
cvNamedWindow("Imagen Procesada",2);
cvShowImage("Imagen Procesada",imagen_r);
//Esperar pulsacin de una tecla
cvWaitKey(0);
//Liberar memoria Mostrar el resultado del procesamiento
cvReleaseImage(&imagen);
cvReleaseImage(&imagen_r);
//Destruir la ventana
cvDestroyWindow("Imagen Original");
cvDestroyWindow("Imagen Procesada");
return 0;
}
//Cargar una imagen y reservar memoria para la imagen
imagen=cvLoadImage(lena.jpg);
//Procesar la imagen, por ejemplo con un suavizado
cvSmooth(imagen,imagen_r,CV_GAUSSIAN,7,0,0,0);
//Procesar la imagen resultante , por ejemplo con un umbralizado
cvThreshold(imagen_r,imagen_r,240, 255, CV_THRESH_BINARY );
//Guardar la imagen resultante en un fichero en el disco duro
cvSaveImage("imagen_resultante.tif",imagen_r);
// Crear una ventana
cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE);
// Variable para realizar la adquisicin.
CvCapture* captura;
// Crear la conexion para adquirir imagen desde la Webcam
captura = cvCreateCameraCapture(0);
// Variable para almacenar la imagen/frame de la webcam.
IplImage* imagen;
// Definir el ancho de la imagen de captura, por ejemplo en este caso se ha inicializado a 480
if(cvSetCaptureProperty(captura, CV_CAP_PROP_FRAME_WIDTH,480))
// Bucle infinito para realizar captura de imagen indefinidamente
while(true) {
// Capturar frame y guardarlo en imagen.
imagen = cvQueryFrame(captura);
// Mostrar imagen capturada
cvShowImage("Webcam", imagen);
}
// Liberar memoria para las variables imagen y la variable captura creadas al principio
cvReleaseImage(&imagen);
cvReleaseCapture(&captura);
// Destruir la ventana donde se muestra la captura
cvDestroyWindow("Webcam");
14/11/2010
9
Descargar e Instalar OpenCV (Biblioteca de funciones)
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/
Descargar e Instalar MS Visual Studio (Compilador C)
http://www.microsoft.com/spain/visualstudio
http://msdn30.e-
academy.com/elms/Storefront/Home.aspx?campus=ddlys_alicante
Funciona sobre: Visual C v.8 o posteriores, VS2005, VS2008, VS2010
incluyendo ediciones Express.
Cmo instalar y configurar?
http://opencv.willowgarage.com/wiki/VisualC%2B%2B
http://www.youtube.com/watch?v=9nPpa_WiArI
Durante la instalacin, seleccionar:
Add OpenCV to the systempath for current user
Instalar en C:/Program Files/OpenCV/ o en C:/OpenCV (segn preferencias)
Choose components: Full
Abrir VS2008
Escoger en el men Herramientas->Opciones
Escoger la opcin Proyectos y soluciones->Directorios de VC++
En la pestaa Mostrar directorios para escoger Archivos de Biblioteca (Fig 1)
En la pestaa Mostrar directorios para escoger Archivos de Inclusin (Fig 2)
En la pestaa Mostrar directorios para escoger Cdigo Fuente (Fig 3)
14/11/2010
10
Seguimos con VS2008
Escoger en el men Proyecto->Propiedades de .
Escoger la opcin Propiedades de configuracin->C/C++->General
En la lnea de Directorios de Inclusin adicionales (Fig 4)
Escoger la opcin Propiedades de configuracin->Vinculador->General
En la lnea de Directorios de Bibliotecas adicionales (Fig 5)
Escoger la opcin Propiedades de configuracin->Vinculador->Entrada
En la lnea de Dependencias adicionales (Figs 6 y 7)
NOTA: Para todos ellos pulsar en botn de Aplicar y finalmente en Aceptar
Guardar los cambios y crear un proyecto nuevo
14/11/2010
11
Abrir VS2008
Escoger en el men Archivo->Nuevo->Proyecto
Escoger la opcin Aplicacin de consola win32
Escribir un programa y guardarlo como .cpp
Compilar el programa empleando la opcin Generar->Compilar
Si al compilar sale un error comprobar que en Herramientas->Opciones->Directorios
de VC++ y en la pestaa Archivos ejecutables aparece la instruccin
$(SystemRoot)\System32
Ejecutar programa empleando la opcin Iniciar->Sin depurar
14/11/2010
12