viernes, 31 de diciembre de 2010

Usando una fuente de vídeo con OpenCV

Para usar una fuente de vídeo (webcam, cámara DV, capturadora, etc) deberemos hacer uso de las funciones cvCaptureFromCAM (inicialización del dispositivo de captura), cvQueryFrame (obtención de un fotograma) y cvReleaseCapture (liberar el dispositivo de captura).

Para mostrar la imagen de la webcam por pantalla haremos uso de las funciones cvNamedWindow (crear una ventana), cvShowImage (mostrar una imagen en una ventana previamente creada) y cvDestroyWindow (cerrar una ventana).

Por último, usaremos cvWaitKey para obtener la pulsación de una tecla antes del transcurso de un tiempo determinado para determinar el deseo del usuario de finalizar el programa capturando la pulsación de la tecla ESC.

El código es el siguiente:

11 comentarios:

  1. Muchas gracias por compartir tu código, ya llevaba tiempo tratando de usar mi webcam con OpenCV y no podía jeje. Grax!!

    ResponderEliminar
    Respuestas
    1. ¡De nada! Es un placer. Hay cientos de ejemplos y tutoriales en inglés, pero me he propuesto documentar todo mi código en castellano (cosa que la mayoría de profesores de universidad desaprueban). Gracias por esa inyección de ánimos. Un saludo.

      Eliminar
  2. Muy interesante! hay posibilidad de capturar la imagen desde una capturadora de video USB??? Excelente trabajo!

    ResponderEliminar
    Respuestas
    1. Por supuesto que sí, o al menos es muy probable, pero cada plataforma tiene sus requisitos de compatibilidad. Para linux debe ser compatible con V4L o firewire, por ejemplo, y para Windows con DirectShow.

      Así que debes comprobar la compatibilidad de tu capturadora USB con linux.

      Hace un par de años, cuando empecé con este blog, tenía una que usaba este driver: http://syntekdriver.sourceforge.net/.

      La verdad es que no he vuelto a probarla y no sé si ya está soportada "de serie" por el núcleo 3.2 de linux que uso en la actualidad.

      Eliminar
  3. Interesante, una pregunta.

    Hay forma de utilizar la cámara de un dispositivo android, asi como la webcam.

    Gracias, seria de gran ayuda un aporte.

    ResponderEliminar
    Respuestas
    1. Por supuesto que sí, de hecho comencé unos artículos inconclusos en los que explicaba en 10 sencillos pasos cómo hacerlo:
      http://blogrobotica.linaresdigital.com/2013/01/crear-aplicacion-android-opencv-10-pasos.html

      Siento decirte que este año me va a ser difícil terminar dicho artículo debido al poco tiempo que me deja libre la paternidad y el proyecto fin de máster, pero te deja las puertas abiertas a seguir otros tutoriales donde no dan tanto lujo de detalles a la hora de configurar librerías, descargarse las cosas, etc.

      Espero que te sea al menos de ayuda o introducción. Un saludo.

      Eliminar
  4. me gusto el tuto lo unico es que el include no lo esta tomando y error tambien el basename me genera un error

    ResponderEliminar
    Respuestas
    1. Cierto, en el siguiente enlace puse la solución:
      http://blogrobotica.linaresdigital.com/2011/02/filtro-de-deteccion-de-bordes-canny.html

      Básicamente debes modificar los includes para que incluya "libgen.h":

      #include <stdlib.h>
      #include <stdio.h>
      #include <unistd.h>
      #include <libgen.h>
      #include <cv.h>
      #include <highgui.h>

      Con eso debería solucionarse. Aún así puedes eliminar todo lo relacionado con basename, únicamente es una manera "elegante" de mostrar la ayuda de uso, no es necesario para el tema que tenemos entre manos.

      Un saludo.

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Hola amigo, de verdad que este tema de opencv es muy bonito, pero tengo una pregunta (soy nuevo en el cuento de la programación tenme paciencia jajaja)
    yo uso una macbook pro y como IDE uso XCode y realmente no encuentro tutoriales bien explicados para esta plataforma, por si acaso tu sabes como podría capturar la imagen de la camara incorporada dentro del portatil y como incluir

    #include
    #include
    #include SOBRE TODO ESTE QUE ME MARCA ERROR - CV.H FILE NOT FOUND
    #include

    muchas gracias por tu tiempo

    ResponderEliminar
    Respuestas
    1. Hola, siento decirte que no dispongo del presupuesto para tener un MacBook para poder probar lo que me dices. Tiene pinta de configuración de la ruta a los "includes" de OpenCV.

      En Linux es tan sencillo como hacer un apt-get install libopencv-dev y todo se instala de manera que se pueda hacer un include en cualquier programa sin problemas.

      Te remitiría a alguien que supiera configurar XCode o bien que busques en google acerca de cómo configurar o agregar rutas de inclusión de archivos de cabecera.

      Eliminar