PDF de programación - Procesamiento Audiovisual - Sesión 4 Creación de una aplicación de procesamiento

Imágen de pdf Procesamiento Audiovisual - Sesión 4 Creación de una aplicación de procesamiento

Procesamiento Audiovisual - Sesión 4 Creación de una aplicación de procesamientográfica de visualizaciones

Publicado el 28 de Agosto del 2017
808 visualizaciones desde el 28 de Agosto del 2017
372,5 KB
10 paginas
Creado hace 12a (14/10/2011)
Procesamiento de Imágenes
Sesión 4. Creación de una aplicación de procesamiento



Guión de Prácticas

Procesamiento de Imágenes



Máster NTI



Guión de prácticas



Descripción

Estructura y módulos

Gestión de ventanas

El callback

Pintar un punto

Otras funciones

Cuadros de diálogo

Sesión 4. QFotoPaint: una aplicación de procesamiento



DESCRIPCIÓN

Notas
finales


 La creación de una herramienta de procesamiento de

imágenes debe
entenderse como un proyecto software que, en consecuencia, hará uso de los
principios ingenieriles de desarrollo de software: fases de análisis y diseño
de
la
implementación, separación interface/implementación. Estos aspectos no son el
objetivo de la práctica, pero sí el medio para desarrollar buenos programas.

la aplicación, uso de abstracciones, modularidad, ocultación de



 En esta sesión vamos a describir la creación de una aplicación de retoque
fotográfico, empezando por un nivel de abstracción alto: descomposición
modular y tipos de datos abstractos necesarios. Básicamente, tendremos
módulos de interface (asociados a los formularios que aparezcan) y módulos
de procesamiento (sin formularios asociados, serán los que usen OpenCV).

 A continuación, vamos a bajar el nivel de abstracción, tratando aspectos
concretos a nivel de implementación. Distinguimos los aspectos que están
relacionados con la gestión de ventanas múltiples, los de las operaciones de
procesamiento y los de la interface de usuario.

 En general, las operaciones de procesamiento de imágenes y vídeo requieren
aplicar diferentes tipos de funciones. De esta forma, las técnicas elementales de
procesamiento –las estudiadas en la asignatura– no aparecen aisladas sino que
se combinan entre sí para conseguir los efectos buscados. Por ejemplo, una
simple operación de pintar un punto en una imagen puede requerir suavizado y
media ponderada, además de la propia operación de generación del punto.



ESTRUCTURA Y MÓDULOS DE LA APLICACIÓN


1. Como hemos visto, diferenciamos

la

interface de usuario y

la parte de

procesamiento de imágenes y vídeo.
 La interface constará de una ventana principal (de tipo QMainWindow) desde la
que se podrán ejecutar todos los comandos y seleccionar las herramientas, y de
varios cuadros de diálogo (de tipo QDialog) relacionados con cada una de las
operaciones que necesiten información adicional.



1

Procesamiento de Imágenes
Sesión 4. Creación de una aplicación de procesamiento



Guión de Prácticas

 La parte de procesamiento constará de dos módulos, uno para el procesamiento
de imágenes y otro para las operaciones de vídeo. Estos dos últimos módulos
serán los que manejen las librerías OpenCV. Los módulos de interface utilizan
las operaciones aquí implementadas.



2. A medida que el proyecto vaya creciendo, será necesario añadir otros módulos de
interface y también podría ser conveniente realizar otra descomposición modular de
la parte de procesamiento.


3. Gráficamente, la estructura de módulos de la aplicación es la siguiente.



Procedimiento

principal

main.cpp

Ventana
principal

mainwindow.[ui | cpp | h]

Formulario

Formulario

nueva imagen

brillo/contraste

. . .

Formulario
rotar imagen

Formulario

vídeo a media

dialognueva.[ui | cpp | h]

brillocontraste.[ui | cpp | h]

rotaravideo.[ui | cpp | h]

mediadevideo.[ui | cpp | h]

Procesamiento

de imágenes
imagenes.[h | cpp]

Procesamiento

de vídeo

video.[h | cpp]

OpenCV



cxcore, cv, highgui



4. Recordar que cada módulo está compuesto de:

 Módulos de interface de usuario:

o Fichero UI: definición del aspecto visual de la interface de usuario; lo

editamos con el diseñador de formularios.

o Fichero H: fichero de cabecera donde viene la definición de la clase

ventana (subclase de QMainWindow o QDialog).

o Fichero CPP: fichero de implementación de los métodos asociados a los

eventos de las ventanas, y otros que se quieran añadir.

 Módulos de procesamiento de imágenes y vídeo:

o Fichero H: fichero de cabecera con la parte pública del módulo, las

operaciones, tipos y variables que ofrece a sus usuarios.

o Fichero CPP: fichero de implementación de las operaciones definidas en

el fichero de cabecera.


5. Para mostrar imágenes IplImage se usarán ventanas de HighGUI. Por lo tanto,
estas ventanas serán controladas desde
los módulos de procesamiento
(imagenes.cpp y video.cpp), también los callbacks necesarios. Entre ellas, las
imágenes que se están editando actualmente aparecerán en ventanas de HighGUI.



2

Procesamiento de Imágenes
Sesión 4. Creación de una aplicación de procesamiento



Guión de Prácticas

6. El estado interno de la aplicación (imágenes abiertas, herramienta, color, tamaño y
suavizado actual, capturador de cámara, etc.), se almacenará también en los
módulos de procesamiento, que ofrecerán mecanismos para cambiar el estado y
acceder a él.


7. En concreto, el módulo imagenes.cpp define el TAD Ventana de Imagen, que
almacena toda la información referida a una imagen que está siendo editada
actualmente (nombre del fichero, IplImage asociado, ROI seleccionado, modificada
o no, etc.). Tendremos un array de elementos de este tipo, según el número
máximo de imágenes que se pueden abrir en el programa.


8. Se ha realizado una modificación dentro del fichero main.cpp para permitir que los
objetos de tipo QApplication y MainWindow se puedan acceder desde fuera.
Originalmente, son creados como variables locales estáticas del procedimiento
main. Ahora son creados como variables dinámicas.



En los sitios donde se quieran usar, se deben poner las declaraciones extern
necesarias.



GESTIÓN DE VENTANAS MÚLTIPLES

9. Una cuestión importante en la aplicación es que se pueden abrir muchas imágenes
simultáneamente para editarlas. Surgen cuestiones relacionadas con su gestión:
conocer las ventanas abiertas en cada momento, saber cuál es la ventana activa
actualmente. Todas las ventanas compartirán el mismo callback.


10. El tipo struct ventana almacena la información necesaria para cada imagen abierta

en una ventana de HighGUI. La definición del tipo (en imagenes.h) es la siguiente:


struct ventana {
bool usada; // Indica si se está usando actualmente esta posición
bool modificada; // Imagen modificada después de abrirla o crearla
char *nombre; // Nombre del fichero que contiene la imagen
HWND handle; // Manejador de Windows de la ventana de HighGUI
CvRect roi; // Región de interés seleccionada (-1 si no hay ninguna)
IplImage *img; // La imagen en sí, siempre de 3 canales
};



3

Procesamiento de Imágenes
Sesión 4. Creación de una aplicación de procesamiento



Guión de Prácticas

11. El array ventana foto[MAX_VENTANAS]; (dentro de imagenes.cpp) almacena la
información de todas las ventanas. Por lo tanto, las ventanas se referencian con un
número, desde 0 hasta MAX_VENTANAS-1. Por ejemplo, en las funciones: void
invertir (int nfoto), void rotar_90 (int nfoto), void rotar_m90 (int nfoto); el número
nfoto se refiere a una de las entradas del array (en estos casos, al sitio donde se
almacenará el resultado).


12. Operaciones sobre las ventanas del array foto:

 void inic_fotos (void): inicializa todo el array foto con los valores iniciales.
 void fin_fotos (void): libera todas las imágenes existentes en el array foto.


int primera_libre (void): busca la primera posición libre donde colocar una
nueva imagen. Si no hay ninguna, devuelve -1.

 void crear_nueva (int nfoto, ...): crea una nueva imagen en la posición nfoto,
que debe ser una posición vacía. Existen diferentes formas de crearlas:
pasándole un tamaño y color de fondo; pasándole un nombre de archivo;
pasándole un IplImage (que queda asociado a la ventana, por lo que no hay que
liberarlo fuera).

 void guardar_foto (int nfoto, const char *nombre): guarda en disco una imagen

del array foto.

 void cerrar_foto (int nfoto, bool destruir_ventana): cierra una imagen, liberando

la entrada del array foto.



 void mostrar (int nfoto): actualiza el contenido de la ventada, es decir, muestra
la imagen en la ventana asociada. Es necesario aplicar esta operación siempre
que se modifique la imagen.
int nombre_a_numero (const char *nombre): dada una cadena, comprueba si
corresponde a una imagen abierta. Si no se encuentra, devuelve -1.
int foto_activa (void): de todas las ventanas abiertas actualmente en el
programa, indica la que está activa (la que está encima de todas). Si no hay
ninguna, devuelve -1.




Nota sobre la última operación. ¿Cómo conocer la ventana activa actualmente? HighGUI no
resuelve esta cuestión. Para hacerlo, debemos usar funciones de las API de Windows (buscar en
Google Windows SDK). En concreto, usamos las funciones GetActiveWindow y GetNextWindow.
Estas funciones usan el tipo HWND, que indica un manejador de una ventana. Por esta razón se ha
añadido el atributo HWND handle, que se inicializa en la creación de las ventanas del array foto:

foto[nfoto].handle= GetActiveWindow();

EL CALLBACK DE LAS VENTANAS



13. El callback asociado a las ventanas es una función muy importante en nuestra
aplicación, ya que deberá hacer diferentes cosas según la herramienta actual
(dibujar puntos, líneas, seleccionar, etc.), según se estén pulsand
  • Links de descarga
http://lwp-l.com/pdf6644

Comentarios de: Procesamiento Audiovisual - Sesión 4 Creación de una aplicación de procesamiento (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad