如何在OpenCV中设置摄影机FPS?CV_CAP_PROP_FPS是假的

如何在OpenCV中设置摄影机FPS?CV_CAP_PROP_FPS是假的,opencv,camera,frame-rate,Opencv,Camera,Frame Rate,如何设置相机FPS 可能是 cvSetCaptureProperty(摄影机捕捉,CV_CAP_PROP_FPS,30); ? 但这是回报 HIGHGUI错误:V4L2:无法获取属性(5)-参数无效 因为highgui/cap_v4l.cpp中没有实现 static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture, int property_id, double valu

如何设置相机FPS

可能是 cvSetCaptureProperty(摄影机捕捉,CV_CAP_PROP_FPS,30); ?

但这是回报 HIGHGUI错误:V4L2:无法获取属性(5)-参数无效

因为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;
}

如何解决这个问题?

我不知道这是否仍然有效,但不久前,大约一年半前,我遇到了这个问题。我联系了OpenCV的一位开发人员,他告诉我,还没有实现对捕获的某些属性进行访问和更改的功能,其他一些功能只适用于某些类型的相机。最后我看了一下(在linux中工作),并制作了一些函数,将libdc1394检索到的数据转换为OpenCV中的IplImages。这不是一项如此艰巨的任务

查看opencv2.4手册,视频捕获功能比以前好多了

->套件(CV、CAP、PROP、FPS,30);大多数时候对我有用。 但是效率有点低

以防万一,你可能不喜欢新的opencv2.4,还想控制你的相机。检查这里的视频输入库。它使用directshow功能运行良好。
http://www.muonics.net/school/spring05/videoInput/

使用用于opencv的python包装器,我将变量称为:

cap = cv2.VideoCapture(1)
cap.set(cv2.cv.CV_CAP_PROP_FPS, 60)
我使用的是python 2.7.3和opencv 2.4.8


相机是PS3的眼睛

CV_CAP_PROP_FPS是一个而不是一个赝品。请参阅OpenCV github repo中的cap_libv4l.cpp()。关键是要确保在配置OpenCV时使用libv4l over v4l。为此,在运行cmake之前,请安装libv4l-dev

sudo apt-get install libv4l-dev
现在,在使用cmake配置OpenCV时,使用_LIBV4L启用选项
。如果一切顺利,在配置状态下,您将看到类似于下面的内容

V4L/V4L2:使用libv4l1(版本)/libv4l2(版本)

然后,在构建OpenCV代码时,必须链接到libv4l1/libv4l2/libv4lconvert


您选择的分辨率下的任意FPS值不需要网络摄像头支持。您可以使用诸如cheese之类的图形工具或诸如lsusb()之类的命令检查支持的分辨率/fps()

我确信并非所有摄像头都支持所有操作。我从未说过这一点,我只是告诉了我的经验以及我是如何解决类似问题的。这是真的,但我有一台Logitech c920,而该摄像头并不支持所有操作。我只是想支持你的说法“其他的只是为某些类型的相机工作”:),我在Ubuntu 12.04上为OpenCV 3.0.0工作。在安装libv4l-dev之后,我重新运行了我的(
,默认情况下启用了_libv4l
),链接工作正常,无需进行任何更改。获取和设置CV_CAP_PROP_FPS现在适用于我的LifeCam影院。
v4l2 ctl-d 0——列表格式ext
列出了每个像素格式(例如,“MJPG”)和分辨率支持的帧速率。对于我的LifeCam Cinemas、MJPG和640x480,我可以设置为30fps,但在我的OpenCV“camera viewer”代码中只能测量到15fps。这也意味着它可能无法在一些已经编译的版本中工作,或者在不同的平台(如windows)上工作。我使用的是python 3.5.2和ps3 eye以及OpenCV 3.2.0-dev和linux,这种方法对我来说很有效。但常量的名称似乎已更改为仅CAP_PROP_FPS。在OpenCV 3.4.3(Python 2.7)上,您也可以将其设置为187 FPS:D(如果通过CAP_PROP_FRAME_WIDTH/HEIGHT设置了低分辨率320x240),该属性似乎是cv2.CAP_PROP_FPS(不需要.cv)。