web-dev-qa-db-fra.com

Comment définir la caméra FPS dans OpenCV? CV_CAP_PROP_FPS est un faux

Comment régler la caméra FPS?

Peut être cvSetCaptureProperty (cameraCapture, CV_CAP_PROP_FPS, 30); ?

Mais c'est retourner HIGHGUI ERROR: V4L2: Impossible d'obtenir la propriété (5) - Argument invalide

Parce qu'il n'y a pas d'implémentation dans 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;
}

Comment le résoudre?

16
victor1234

en utilisant le python wrappers pour opencv, cela a fonctionné pour moi de faire référence à la variable comme:

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

J'utilise python 2.7.3 et opencv 2.4.8

La caméra est la PS3 Eye

17
elzbth

Je ne sais pas si c'est toujours valable, mais il y a quelque temps, quelque chose comme un an et demi, j'ai rencontré exactement ce problème. J'ai contacté un développeur d'OpenCV et il m'a dit que l'accès et la possibilité de modifier certaines des propriétés d'une capture n'étaient pas encore implémentés et que certains autres fonctionnaient juste pour certains types de caméras. J'ai finalement jeté un coup d'œil à libdc1394 (travaillant sous linux) et créé quelques fonctions qui ont converti les données récupérées par libdc1394 en IplImages à partir d'OpenCV. Ce n'était pas une tâche si difficile.

6
Genís

CV_CAP_PROP_FPS est un [~ # ~] pas [~ # ~] un faux. Voir cap_libv4l.cpp ( 1 ) dans le repo OpenCV github. La clé est de vous assurer que vous utilisez libv4l sur v4l lors de la configuration d'OpenCV. Pour cela, avant d'exécuter cmake, installez libv4l-dev

Sudo apt-get install libv4l-dev

Maintenant, lors de la configuration d'OpenCV avec cmake, activez l'option, WITH_LIBV4L. Si tout se passe bien, dans l'état de configuration, vous verrez quelque chose de similaire à ci-dessous

V4L/V4L2: Utilisation de libv4l1 (ver)/libv4l2 (ver)

Et puis lors de la construction de votre code OpenCV, vous devrez établir un lien avec libv4l1/libv4l2/libv4lconvert.

Les valeurs FPS arbitraires aux résolutions que vous choisissez, n'ont pas besoin d'être prises en charge par votre webcam. Vous pouvez vérifier les résolutions/fps prises en charge avec des outils graphiques comme cheese ou des commandes comme lsusb ( 2 )

6
Kiran

consultez le manuel opencv2.4, la capture vidéo est bien meilleure qu'auparavant,

-> set (CV_CAP_PROP_FPS, 30); fonctionne pour moi la plupart du temps. mais un peu faible efficacité.

juste au cas où vous n'aimeriez pas le nouvel opencv2.4 et souhaitez toujours contrôler votre appareil photo. vérifiez la bibliothèque d'entrée vidéo ici. cela fonctionne bien et utilise les fonctionnalités de directshow. http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/

3
flankechen