【问题标题】:Getting and Setting Camera Settings获取和设置相机设置
【发布时间】:2010-06-25 15:10:55
【问题描述】:

我一直在四处寻找,但找不到有关如何获取和设置相机捕获设置的示例。例如捕获分辨率、fps、色彩平衡等。我只看到了如何在保存捕获的视频时更改设置的示例,但我希望能够找到所有相机的捕获模式并选择我想要的一种。例如,我正在使用 PS3eye 网络摄像头,在测试程序中,它允许您更改设置(15、30、60、120 fps 时的 320x240,15、30、60、75 fps 时的 640x480)。那么 OpenCV 中是否有一个函数可以获取所有相机的捕获模式并选择一个?我记得在 OpenFrameworks 中有一个功能可以更改这些设置,但我想知道如何在 OpenCV 中进行。

这里是 OpenFrameworks 和 OpenCV 的代码,可以满足我的需求:

vidGrabber.setDeviceID( 4 );
vidGrabber.setDesiredFrameRate( 30 ); //I want this
vidGrabber.videoSettings();
vidGrabber.setVerbose(true);
vidGrabber.initGrabber(320,240); //And this

【问题讨论】:

    标签: c++ settings opencv webcam


    【解决方案1】:
    cvSetCaptureProperty()
    

    带有这些标志:

    CV_CAP_PROP_FRAME_WIDTH  - width of frames in the video stream (only for cameras)
    CV_CAP_PROP_FRAME_HEIGHT - height of frames in the video stream (only for cameras)
    CV_CAP_PROP_FPS          - frame rate (only for cameras)
    

    【讨论】:

    • 更改分辨率有效,但我找不到任何 fps 变化的证据。这是对的? CvCapture *捕获;捕获 = cvCreateCameraCapture(5); cvSetCaptureProperty(capture,CV_CAP_PROP_FPS,15);
    • 是的,应该没问题。你的相机支持15FPS吗?如果是这样,你如何确保 FPS 没有改变?还有 cvGetCaptureProperty() 函数可以用来查看 FPS 是否改变。
    • 我通过测量查询帧所需的计算时间来查看是否有变化,但它没有变化。我是否通过增加 fps 来纠正 cvQueryFrame() 的延迟时间应该减少?当我将其设置为不同的速度时,在视觉上也没有区别,而且我确信相机可以在这些速度下运行,因为它附带的测试应用程序具有这些设置。我还在不同的地方尝试了 cvGetCapturePropety(),但我总是得到 0,即使在我将其设置为 30 之后也是如此。打印 fps 是否正确? printf("%d\n",(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FPS));
    【解决方案2】:

    我建立了一个 Directshow 相机库,可以获取相机的分辨率和属性。

    https://github.com/kcwongjoe/directshow_camera

    fps 通常取决于您的机器、分辨率和曝光时间。要更改 fps,您可以在固定分辨率下修改曝光时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      相关资源
      最近更新 更多