【问题标题】:How to set camera FPS in OpenCV? CV_CAP_PROP_FPS is a fake如何在 OpenCV 中设置相机 FPS? CV_CAP_PROP_FPS 是假的
【发布时间】:2011-10-25 18:10:40
【问题描述】:

如何设置相机帧率?

可能是 cvSetCaptureProperty(cameraCapture, CV_CAP_PROP_FPS, 30); ?

但它的回报 HIGHGUI ERROR: V4L2: Unable to get property (5) - Invalid argument

因为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 camera frame-rate


    【解决方案1】:

    我不知道这是否仍然有效,但前一段时间,大约一年半,我遇到了这个问题。我联系了 OpenCV 的开发人员,他告诉我,更改捕获的某些属性的访问和能力尚未实现,而其他一些属性仅适用于某些类型的相机。我终于看了一下 libdc1394 (在 linux 中工作)并制作了一些函数,将 libdc1394 检索到的数据转换为来自 OpenCV 的 IplImages。这不是一项艰巨的任务。

    【讨论】:

    • 我绝对是真的,并非所有相机都支持所有操作。
    • 我从来没有这么说,我只是告诉我我的经历以及我是如何解决类似问题的。
    • 确实如此,但我有一台罗技 c920,而该相机不支持所有操作。我只是想支持您的说法“其他仅适用于某些类型的相机”:),相关stackoverflow.com/questions/16432676/…
    【解决方案2】:

    查看opencv2.4手册,视频采集的东西比以前好多了,

    ->set(CV_CAP_PROP_FPS,30);大多数时候对我有用。 但是效率有点低。

    以防万一您可能不喜欢新的 opencv2.4 并且仍想控制您的相机。在此处检查视频输入库。它工作得很好并且使用了directshow功能。 http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/

    【讨论】:

      【解决方案3】:

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

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

      我正在使用 python 2.7.3 和 opencv 2.4.8

      相机是 PS3 Eye

      【讨论】:

      • 我正在使用 python 3.5.2 和 ps3 eye 以及 opencv 3.2.0-dev 和 linux,这种方法对我有用。不过,常量的名称似乎已更改为 CAP_PROP_FPS。
      • 您也可以将其设置为 187 fps:D(如果通过 CAP_PROP_FRAME_WIDTH/HEIGHT 设置低分辨率 320x240)
      • 在 OpenCV 3.4.3 (Python 2.7) 上,该属性似乎是 cv2.CAP_PROP_FPS(不需要 .cv)。
      【解决方案4】:

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

      sudo apt-get install libv4l-dev
      

      现在在使用 cmake 配置 OpenCV 时,启用选项 WITH_LIBV4L。如果一切顺利,在配置状态下,您会看到类似于下面的内容

      V4L/V4L2:使用 libv4l1 (ver ) / libv4l2 (ver )

      然后在构建您的 OpenCV 代码时,您必须与 libv4l1/libv4l2/libv4lconvert 链接。

      您选择的分辨率下的任意 FPS 值,您的网络摄像头不需要支持。您可以使用像奶酪这样的图形工具或像 lsusb (2) 这样的命令来检查支持的分辨率/fps

      【讨论】:

      • 为我在 Ubuntu 12.04 上的 OpenCV 3.0.0 工作。安装 libv4l-dev 后,我重新运行了我的 original cmakeWITH_LIBV4L 默认启用)并且链接正常工作,无需进行任何更改。获取和设置 CV_CAP_PROP_FPS 现在适用于我的 LifeCam Cinemas。
      • v4l2-ctl -d 0 --list-formats-ext 列出了每种像素格式(例如“MJPG”)和分辨率支持的帧速率。对于我的 LifeCam Cinemas、MJPG 和 640x480,我可以设置 30fps,但在我的 OpenCV“相机查看器”代码中仅测量到 15fps。
      • 这也意味着它可能无法在一些已经编译好的版本中运行,或者在不同的平台(如windows)上运行。
      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多