[Jde-dev] [Jde-users] Capturar imagen con opencv

David Lobato dav.lobato en gmail.com
Mar Ene 13 12:38:14 CET 2009


La idea de usar sólo opencv como librería para acceder a las cámaras va
detrás de generalizar el API de acceso al hardware "cámara". Y esto no lo
hemos conseguido aun en nuestro software.

El estado actual es que diferentes drivers acceden de diferentes maneras y
proporcionan diferentes implementaciones de la variable colorX o varcolorX.
Las últimas modificaciones que habéis hecho para unificar varcolorX, sin
duda, son positivas, pero creo que no son suficientes.

¿Por qué no tenemos un driver "camera" que configurado adecuandamente
obtenga las imagenes de donde proceda?





El 7 de enero de 2009 16:56, JoseMaria <jmplaza en gsyc.es> escribió:

> Estupendo Sara, hay que darle forma de driver para que las aplicaciones
> actuales en JDE que manejan imágenes lo puedan utilizar.
>
> Sip, la eficiencia es una cuestión muy importante para las aplicaciones
> que estamos haciendo ahora. En el fondo tiene que ver también con el API
> de imágenes que queremos, o los APIs. Hasta ahora las imágenes
> (colorA,varcolorA, varcolorB...) van en RGB, de 3 bytes por pixel, y es
> un formato muy genérico. Nada impide hacer interfaces ofreciendo
> fotogramas en formato YUV o HSV si es lo que dan las cámaras
> directamente y si es lo que necesitan ciertas aplicaciones. Con eso nos
> ahorramos una conversión, de YUV a RGB, por ejemplo.
>
> También se podrían publicar interfaces como IplImage (tipo que maneja
> opencv para las imágenes) si es interesante. Ahora mismo el driver
> ofrece en su interfaz el puntero a las imágenes, el cliente no tiene por
> qué hacer copia si no le interesa (ahí se podría ganar algo en
> eficiencia).
>
> Otra cuestión interesante es la robustez frente a concurrencia
> (thread-safe). Por ejemplo para que no haya condiciones de carrera en el
> acceso del driver (escribiendo la nueva imagen) y el acceso de los
> esquemas de aplicación (leyendo la nueva imagen). Ahora mismo esto no se
> vigila explícitamente (por ejemplo con semáforos) para no ralentizar
> ejecución. El precio es que efectivamente el esquema usuario puede leer
> un trozo de su imagen de la iteración anterior y otro de la última.
>
> Lo de grabar videos es otra funcionalidad nueva y ahí también tenemos
> que ver cómo organizarlo. Hasta ahora lo que tenemos es el esquema
> "recorder" que guarda uno a uno los fotogramas que va leyendo. Esto
> permitía grabar secuencias de fotogramas incluso decorados con lineas y
> píxeles coloreados según quisiera el esquema que producía esos
> fotogramas. Con una aplicación externa se podía componer un mpeg.
> Primitivo, pero es lo mejor que tenemos hasta ahora :-), aunque hace ya
> meses (años?) que no se usa. Seguro que hay formas más elegantes y
> eficientes de hacerlo ahora....
>
> Ãnimo,
>
> JoseMaria
> On Mon, 2009-01-05 at 12:26 +0100, Roberto Calvo wrote:
> > Genial :-)
> >
> > A mi no me funcionó con las logitech nuevas, pero creo que era porque no
> > configuraba bien la resolución. A ver si cuando vuelva puedo probarlas.
> >
> > Sara, en el paquete opencv-doc hay varios ejemplos en C que hacen uso de
> > este api, échales un ojo si no lo has hecho ya, que hay bastante código.
> >
> > El driver es una cosa a debatir. El hecho de hacerlo porque sí para
> > recubrir tampoco tiene mucho sentido. Los drivers de imágenes que
> > tenemos, al final ralentizan el proceso porque realizan conversiones que
> > hay que estudiar si son necesarias. También es importante ver que pasa
> > si se activa el driver opencv para imágenes, y ahora yo quiero grabar un
> > video. Grabar frame por frame es costoso y seguro que internamente
> > opencv lo hace mejor escribiendo a disco.
> >
> >
> > Por cierto Sara, actualiza tu bookmarks de correos, que jde-developers
> > antes era jde en gsyc.es y ahora es jde-developers en gsyc.es, más que nada
> > por no meter ruido en la lista de users.
> >
> > un saludete!
> >
> > El lun, 05-01-2009 a las 12:01 +0100, Sara Marugan escribió:
> > > He modificado el código para que la captura se vea en una ventanita en
> > > tiempo real.
> > >
> > > void main(){
> > >      CvCapture* myCapture = NULL;
> > >      IplImage *frame = NULL;
> > >
> > >      // webcam capture started (opencv)
> > >
> > >      myCapture =  cvCaptureFromCAM(-1);
> > >      if (myCapture == NULL)
> > >      {
> > >         printf ("Error myCapture == NULL\n");
> > >         return;
> > >      }
> > >
> > >      cvNamedWindow( "opencv", 1 );
> > >
> > >      /* Config Image Size */
> > >      cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);
> > >      cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);
> > >
> > >      /* Capture frame */
> > >      while(1){
> > >          frame = cvQueryFrame( myCapture );
> > >          cvShowImage( "opencv", frame);
> > >              cvWaitKey(10);
> > >      }
> > >
> > >      // webcam capture finished (opencv)
> > >      cvDestroyWindow("opencv");
> > >      cvReleaseCapture(&myCapture);
> > > }
> > >
> > >
> > > Sara Marugan escribió:
> > > > He realizado una prueba con el código que envió Roberto y una webcam
> usb
> > > > trust normalita y ha funcionado a la primera :)
> > > > Parece que con las usb no va a tener problema.
> > > >
> > > > Yo también creo que el driver basado en opencv podría dar la mayoría
> del
> > > > soporte de vídeo.
> > > >
> > > > David Lobato escribió:
> > > >
> > > >> Yo veo prometedora esta vía. ¿¿Para que preocuparnos de drivers de
> > > >> bajo nivel para acceder a las cámaras si opencv ya lo sabe hacer y
> > > >> además con una API tan sencillo??
> > > >>
> > > >> Por lo poco que he leído también puede leer varios formatos de video
> y
> > > >> seguro que imágenes estáticas. Vamos que podemos poner casi todo el
> > > >> soporte de video en este driver.
> > > >>
> > > >>
> > > >>
> > > >> El 31 de diciembre de 2008 14:19, Roberto Calvo <rocapal en gsyc.es
> > > >> <mailto:rocapal en gsyc.es>> escribió:
> > > >>
> > > >>
> > > >>     Buenas,
> > > >>
> > > >>     He estado haciendo pruebas para capturar la imagen de la webcam
> > > >>     utilizando software de terceros. No parece que tengamos
> suficientes
> > > >>     recursos para mantener drivers actualizados para webcams usb y
> > > >>     firewire.
> > > >>
> > > >>     He utilizado opencv para realizar estas pruebas desde la
> > > >>     arquitectura de
> > > >>     JDE. Es bastante sencillo obtener un frame de una imagen
> (también
> > > >>     dispone de funciones para capturar vídeo). Un ejemplo:
> > > >>
> > > >>      CvCapture* myCapture = NULL;
> > > >>      IplImage *frame = NULL;
> > > >>
> > > >>      // webcam capture started (opencv)
> > > >>
> > > >>      myCapture =  cvCaptureFromCAM(-1);
> > > >>      if (myCapture == NULL)
> > > >>      {
> > > >>         printf ("Error myCapture == NULL\n");
> > > >>         return;
> > > >>      }
> > > >>
> > > >>      /* Config Image Size */
> > > >>      cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);
> > > >>      cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);
> > > >>
> > > >>      /* Capture frame */
> > > >>      frame = cvQueryFrame( myCapture );
> > > >>      cvSaveImage("/tmp/prueba.png",frame);
> > > >>
> > > >>      // webcam capture finished (opencv)
> > > >>      cvReleaseCapture(&myCapture);
> > > >>
> > > >>
> > > >>     La imagen que se guarda en frame, es una imagen de 3 canales.
> > > >>     Convirtiéndola a una imagen de 4 canales (R,G,B,dummy) tenemos
> la
> > > >>     misma
> > > >>     estructura que en JDE para utilizar imágenes.
> > > >>
> > > >>     Estas pruebas las he realizado con la Philips PCVC740K. Tendré
> que
> > > >>     probar con la logitech a ver si funciona igual de bien.
> > > >>
> > > >>     Seguiremos probando a ver si puede ser una buena solución para
> > > >>     despreocuparnos de drivers usb/firewire.
> > > >>
> > > >>     un saludete y Feliz Año a todos!!
> > > >>
> > > >>     --
> > > >>     Roberto Calvo Palomino          | Libre Software Engineering
> Lab
> > > >>     (GSyC)
> > > >>     Tel: (+34) 91 488 85 23         | Universidad Rey Juan Carlos
> > > >>     Tel: (+34) 91 488 81 05         | Edif. Departamental II -
> > > >>     Despacho 116
> > > >>     rocapal en gsyc.es <mailto:rocapal en gsyc.es>                 |
> > > >>     c/Tulipán s/n 28933 Móstoles (Madrid)
> > > >>     http://libresoft.es/
> > > >>
> > > >>     GPG-KEY: http://gsyc.es/~rocapal/rocapal.gpg<http://gsyc.es/%7Erocapal/rocapal.gpg>
> > > >>     <http://gsyc.es/%7Erocapal/rocapal.gpg>
> > > >>
> > > >>     _______________________________________________
> > > >>     Jde-developers mailing list
> > > >>     Jde-developers en gsyc.es <mailto:Jde-developers en gsyc.es>
> > > >>
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> > > >>
> > > >>
> > > >>
> ------------------------------------------------------------------------
> > > >>
> > > >> _______________________________________________
> > > >> Jde-developers mailing list
> > > >> Jde-developers en gsyc.es
> > > >> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> > > >>
> > > >>
> > > >
> > > > _______________________________________________
> > > > Jde-users mailing list
> > > > Jde-users en gsyc.es
> > > > http://gsyc.es/cgi-bin/mailman/listinfo/jde-users
> > > >
> > > >
> > > >
> > >
> > > _______________________________________________
> > > Jde-users mailing list
> > > Jde-users en gsyc.es
> > > http://gsyc.es/cgi-bin/mailman/listinfo/jde-users
> > _______________________________________________
> > Jde-developers mailing list
> > Jde-developers en gsyc.es
> > http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> --
> http://gsyc.es/jmplaza
> Universidad Rey Juan Carlos
>
>
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20090113/67beb438/attachment-0001.htm 


More information about the Jde-developers mailing list