El proyecto empieza a tomar forma. Esta semana me he dedicado a realizar dos funciones:
La primera consistía en mostrar una secuencia de imágenes, dando la impresión de "movimiento". He usado las que me bajé la otra vez del edificio en construcción. El resultado es una versión "a lo bruto" de lo que tendría que ser el proyecto una vez finalizado, ya que se notan mucho las transiciones entre imágenes. La implementación ha sido bastante sencilla, usando un bucle que va cargando una imagen y mostrándola en cada iteración. Las mayores complicaciones han venido del lado de la dirección de la imagen, ya que esta tiene que cambiar en cada iteración. Lo que hice fue pasar el contador del bucle a char, concatenarlo con la extensión de la imagen (.jpg por ejemplo), y usar el resultado como dirección. Aún así, al finalizar el programa (y mostrar correctamente las imágenes), me sale el siguiente error: "Stack around the variable 'xxxx' was corrupted", siendo "xxxx" una variable que uso para inicializar un puntero a char que es en donde guardaré la dirección de la imagen (ya que el compilador me decía que debía inicializar dicho puntero). He estado probando cosas pero sigo sin quitar ese error. Al menos no molesta demasiado por ahora...
La segunda de las funciones que he hecho ha sido algo más complicada. Consistía en hallar la imagen promedio de un número de imágenes. La principal complicación fue hallar el modo de acceder a cada píxel de la imagen. Buscando por diversos tutoriales de Internet vi diversos métodos, y finalmente me decanté por uno que al parecer no es muy eficiente, pero sí me resultó más sencillo de entender (los otros métodos no conseguí entenderlos del todo).
Simplemente hay que usar la función "cvGet2D(img,y,x)", donde "x" e "y" son las coordenadas del píxel al que se quiere acceder. Esta función devuelve en una variable del tipo CvScalar los valores RGB del píxel, del siguiente modo:
s.val[0]=blue
s.val[1]=green
s.val[2]=red
Para recoger la información del color de cada píxel de la imagen definí un array de dos dimensiones, del tamaño que tengan las imágenes a tratar (p.ej. 300x240), y que guardase en cada posición la información RGB mediante un struct. Lo demás es bastante sencillo: usando este array se va recogiendo la información de cada pixel de cada imagen, y se halla el promedio. Una vez obtenido este, se usa la función "cvSet2D(img,y,x,s)", que básicamente hace lo inverso que "cvGet2D", creando la imagen resultado.
Como he dicho, este método puede no resultar muy eficiente, y de hecho hay desbordamiento de pila si se usan imágenes de gran tamaño. Por eso intentaré averigüar cómo hacerlo de una manera más eficiente.
17 dic 2008
26 nov 2008
Primeros pasos
Bueno, después de pelearme con los IDEs y OpenCV durante semanas, por fin puedo ponerme en marcha.
Desde mi última entrada en el blog seguí probando otros entornos de programación, e incluso me bajé el Service Pack 1 de Vista, pero la cosa seguía sin ir. Me seguía saliendo el mismo error que comenté anteriormente. Así que decidí cortar por lo sano y formatear el ordenador. Reinstalé Vista, instalé el Visual Studio 2003 (que decidí usarlo ya que es el que está en los ordenadores de la universidad), y... nada, el mismo puñetero error. Como última opción antes de mandar todo a tomar por saco, probé a instalar OpenCV en el portátil de mi hermano, que también usa Vista. Instalé el Visual Studio 2003, compilé el código, lo ejecuté... y funcionaba perfectamente. Inexplicablemente, en el portátil de mi hermano funciona, y en el mio recién formateado no, usando el mismo entorno de programación. Así que, hasta que no descubra lo que falla en mi ordenador, tendré que hacer el proyecto en el de mi hermano.
Sobre el proyecto en sí, Juanjo (uno de mis tutores en el proyecto), me dio la dirección de la web de un chico que ha hecho el proyecto en el que se basa el mio. Le estuve echando un vistazo y me bajé un pack de imágenes para poder trabajar con ellas próximamente, así como un vídeo en donde se ve el resultado final de la reconstrucción. También me bajé el pdf en donde explica todo el proceso que siguió, aunque por ahora no entiendo mucho de lo que habla (sigo estando un poco pez en OpenCV).
Sobre OpenCV, me he puesto a hacer algunos ejemplos sencillos de tratamiento de imágenes que vienen en esta web. He intentado hacer un bucle que vaya cargando imágenes y las muestre por pantalla (usando el pack de imágenes que me descargué anteriormente), pero no sé como hacer que el string con la dirección de la imagen vaya cambiando en cada iteración. Imagino que habrá alguna forma de hacerlo, así que seguiré investigando, y seguiré probando cosillas con OpenCV hasta que me ponga definitivamente manos a la obra con el proyecto.
Un saludo.
Desde mi última entrada en el blog seguí probando otros entornos de programación, e incluso me bajé el Service Pack 1 de Vista, pero la cosa seguía sin ir. Me seguía saliendo el mismo error que comenté anteriormente. Así que decidí cortar por lo sano y formatear el ordenador. Reinstalé Vista, instalé el Visual Studio 2003 (que decidí usarlo ya que es el que está en los ordenadores de la universidad), y... nada, el mismo puñetero error. Como última opción antes de mandar todo a tomar por saco, probé a instalar OpenCV en el portátil de mi hermano, que también usa Vista. Instalé el Visual Studio 2003, compilé el código, lo ejecuté... y funcionaba perfectamente. Inexplicablemente, en el portátil de mi hermano funciona, y en el mio recién formateado no, usando el mismo entorno de programación. Así que, hasta que no descubra lo que falla en mi ordenador, tendré que hacer el proyecto en el de mi hermano.
Sobre el proyecto en sí, Juanjo (uno de mis tutores en el proyecto), me dio la dirección de la web de un chico que ha hecho el proyecto en el que se basa el mio. Le estuve echando un vistazo y me bajé un pack de imágenes para poder trabajar con ellas próximamente, así como un vídeo en donde se ve el resultado final de la reconstrucción. También me bajé el pdf en donde explica todo el proceso que siguió, aunque por ahora no entiendo mucho de lo que habla (sigo estando un poco pez en OpenCV).
Sobre OpenCV, me he puesto a hacer algunos ejemplos sencillos de tratamiento de imágenes que vienen en esta web. He intentado hacer un bucle que vaya cargando imágenes y las muestre por pantalla (usando el pack de imágenes que me descargué anteriormente), pero no sé como hacer que el string con la dirección de la imagen vaya cambiando en cada iteración. Imagino que habrá alguna forma de hacerlo, así que seguiré investigando, y seguiré probando cosillas con OpenCV hasta que me ponga definitivamente manos a la obra con el proyecto.
Un saludo.
3 nov 2008
Peleándome con los IDEs
Lo primero es buscar un entorno de programación en donde realizar el proyecto. Así que decidí descargarme el Eclipse GAVAB como han hecho otros compañeros. Sin embargo me ha dado algunos problemas extraños que no he conseguido solucionar (concretamente, en un pequeño programa de prueba, se me ejecutan primero los "scanf", y luego el resto del código).
Por tanto probé con el Visual Studio 2008 Express Edition. Aquí no tuve problemas al ejecutar código. El problema vino después, cuando me descargué las librerías de OpenCV. Una vez instalado, y siguiendo un sencillo tutorial, añadí los directorios de librerías, includes y demás al Visual Studio. Después probé un pequeño programa que carga una imagen y la invierte, mostrándola por pantalla, y compilaba perfectamente. El problema vino a la hora de ejecutar el código, ya que me muestra un error, concretamente este:
LDR: LdrpWalkImportDescriptor() failed to probe C:\Program Files\OpenCV\bin\cxcore110.dll for its manifest, ntstatus 0xc0150002
Busqué por Internet y encontré una posible solución, que consistía en instalar un service pack para Visual Studio, por lo que desinstalé la versión que tenía y me volví a bajar una versión nueva con el SP1. Lamentablemente me sigue saliendo el mismo error, así que estoy un poco desesperado. No consigo un IDE en donde poder desarrollar el proyecto, siempre surge algún problema. Lo seguiré intentando durante los próximos días, aunque conseguir que algo funcione en Windows Vista es todo un milagro.
Mientras tanto seguiré mirando documentación de OpenCV para intentar ir aprendiendo algo más de estas librerías.
Un saludo.
Por tanto probé con el Visual Studio 2008 Express Edition. Aquí no tuve problemas al ejecutar código. El problema vino después, cuando me descargué las librerías de OpenCV. Una vez instalado, y siguiendo un sencillo tutorial, añadí los directorios de librerías, includes y demás al Visual Studio. Después probé un pequeño programa que carga una imagen y la invierte, mostrándola por pantalla, y compilaba perfectamente. El problema vino a la hora de ejecutar el código, ya que me muestra un error, concretamente este:
LDR: LdrpWalkImportDescriptor() failed to probe C:\Program Files\OpenCV\bin\cxcore110.dll for its manifest, ntstatus 0xc0150002
Busqué por Internet y encontré una posible solución, que consistía en instalar un service pack para Visual Studio, por lo que desinstalé la versión que tenía y me volví a bajar una versión nueva con el SP1. Lamentablemente me sigue saliendo el mismo error, así que estoy un poco desesperado. No consigo un IDE en donde poder desarrollar el proyecto, siempre surge algún problema. Lo seguiré intentando durante los próximos días, aunque conseguir que algo funcione en Windows Vista es todo un milagro.
Mientras tanto seguiré mirando documentación de OpenCV para intentar ir aprendiendo algo más de estas librerías.
Un saludo.
2 nov 2008
Presentación
Bueno, en este blog iré comentando mis avances con el Proyecto Final de Carrera de Ingeniería Técnica en Informática de Sistemas. El título del PFC es "Reconstrucción de vídeo a partir de fotografías temporalmente distantes", cuya descripción es la siguiente:
"A partir de una colección de imágenes del mismo escenario dinámico pero tomadas en instantes diferentes, se aplicarán métodos de reconstrucción para crear un vídeo que minimice los problemas de iluminación, movimiento y posición de las capturas."
Intentaré actualizar el blog lo más posible, con mis últimos avances realizados en el proyecto.
Un saludo.
"A partir de una colección de imágenes del mismo escenario dinámico pero tomadas en instantes diferentes, se aplicarán métodos de reconstrucción para crear un vídeo que minimice los problemas de iluminación, movimiento y posición de las capturas."
Intentaré actualizar el blog lo más posible, con mis últimos avances realizados en el proyecto.
Un saludo.
Suscribirse a:
Entradas (Atom)