2011-08-12 24 views
10

¿Cómo configurar la cámara FPS?¿Cómo configurar los FPS de la cámara en OpenCV? CV_CAP_PROP_FPS es falso

Puede ser cvSetCaptureProperty (cameraCapture, CV_CAP_PROP_FPS, 30); ?

Pero es volver ERROR HIGHGUI: V4L2: No se puede obtener la propiedad (5) - Argumento no válido

Debido a que no hay una aplicación en highgui/cap_v4l.cpp

static int icvSetPropertyCAM_V4L(CvCaptureCAM_V4L* capture, 
            int property_id, double value){ 
    static int width = 0, height = 0; 
    int retval; 

    /* initialization */ 
    retval = 0; 

    /* two subsequent calls setting WIDTH and HEIGHT will change 
     the video size */ 
    /* the first one will return an error, though. */ 

    switch (property_id) { 
    case CV_CAP_PROP_FRAME_WIDTH: 
     width = cvRound(value); 
     if(width !=0 && height != 0) { 
      retval = icvSetVideoSize(capture, width, height); 
      width = height = 0; 
     } 
     break; 
    case CV_CAP_PROP_FRAME_HEIGHT: 
     height = cvRound(value); 
     if(width !=0 && height != 0) { 
      retval = icvSetVideoSize(capture, width, height); 
      width = height = 0; 
     } 
     break; 
    case CV_CAP_PROP_BRIGHTNESS: 
    case CV_CAP_PROP_CONTRAST: 
    case CV_CAP_PROP_SATURATION: 
    case CV_CAP_PROP_HUE: 
    case CV_CAP_PROP_GAIN: 
    case CV_CAP_PROP_EXPOSURE: 
     retval = icvSetControl(capture, property_id, value); 
     break; 
    default: 
     fprintf(stderr, 
       "HIGHGUI ERROR: V4L: setting property #%d is not supported\n", 
       property_id); 
    } 

    /* return the the status */ 
    return retval; 
} 

¿Cómo se puede solucionar?

Respuesta

6

No sé si eso sigue siendo válido, pero hace algún tiempo, algo así como un año y medio, me encontré con ese problema exactamente. Me puse en contacto con un desarrollador de OpenCV y me dijo que el acceso y la capacidad de cambiar algunas de las propiedades de una captura aún no se habían implementado y que otros simplemente funcionaban para ciertos tipos de cámaras. Finalmente eché un vistazo al libdc1394 (trabajando en Linux) e hice algunas funciones que convertían los datos recuperados por libdc1394 a IplImages desde OpenCV. No fue una tarea tan difícil.

+0

Definitivamente es cierto que no todas las cámaras admiten todas las operaciones. –

+0

Nunca dije eso, solo conté mi experiencia y cómo resolví un problema similar. –

+0

Eso es cierto, pero tengo un Logitech c920 y esa cámara simplemente no admite todas las operaciones. Solo quería respaldar su afirmación "otros simplemente funcionó para ciertos tipos de cámara" :), relacionados con http://stackoverflow.com/questions/16432676/cant-access-properties-of-cvvideocapture-with-logitech-c920 –

3

cheque opencv2.4 manual a cabo, la cosa de captura de vídeo es mucho mejor que antes,

-> set (CV_CAP_PROP_FPS, 30); funciona para mí la mayor parte de las veces. pero un poco de baja eficiencia.

en caso de que no le guste el nuevo opencv2.4 y aún así desee controlar su cámara. comprueba la lib de entrada de video aquí. funciona bien y usa las funciones de directshow. http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/

7

utilizando las envolturas de Python para OpenCV, que trabajó para mí hacer referencia a la variable como:

cap = cv2.VideoCapture(1) 
cap.set(cv2.cv.CV_CAP_PROP_FPS, 60) 

soy al utilizar Python 2.7.3 y 2.4.8 OpenCV

la cámara es el ojo PS3

+1

Estoy usando python 3.5.2 y ps3 eye y opencv 3.2.0-dev y linux y este método funciona para mí. El nombre de la constante parece haber cambiado a solo CAP_PROP_FPS. –

+0

Puede configurarlo a 187 fps también: D (si baja resolución 320x240 establecido a través de CAP_PROP_FRAME_WIDTH/HEIGHT) –

3

CV_CAP_PROP_FPS es un NO una falsificación. Ver cap_libv4l.cpp (1) en OpenCV github repo. La clave es asegurarse de que usa libv4l sobre v4l al configurar OpenCV. Por eso, antes de ejecutar cmake, instalar libv4l-dev

sudo apt-get install libv4l-dev 

Ahora bien, aunque la configuración de OpenCV con cmake, la opción de habilitar, WITH_LIBV4L. Si todo va bien, en el estado de configuración, verá algo similar a continuación

V4L/V4L2: Using libv4l1 (ver)/libv4l2 (ver)

Y entonces, mientras que la construcción de su código de OpenCV, tendrá que enlazar con libv4l1/libv4l2/libv4lconvert.

Arbitary Los valores de FPS en las resoluciones que elija no necesitan ser compatibles con su cámara web. Puede consultar resoluciones/fps compatibles con herramientas gráficas como queso o comandos como lsusb (2)

+1

Funcionó para mí para OpenCV 3.0.0 en Ubuntu 12.04. Después de instalar libv4l-dev, relancé mi [cmake original] (http://stackoverflow.com/a/29238291/1628638) ('WITH_LIBV4L' estaba habilitado por defecto) y los enlaces funcionaban sin ningún cambio que hacer. Obtener y establecer CV_CAP_PROP_FPS ahora funciona para mis Cines LifeCam. –

+1

'v4l2-ctl -d 0 --list-formats-ext' enumera las velocidades de fotogramas compatibles para cada formato de píxel (por ejemplo, 'MJPG') y resolución. Para mi LifeCam Cinemas, MJPG y 640x480, pude establecer 30 fps pero solo 15 fps en mi código OpenCV "visor de cámara". –

+0

Lo que también significa que puede no funcionar en algunas versiones ya compiladas, o en diferentes plataformas (como Windows). –

Cuestiones relacionadas