获取和设置相机设置
Posted
技术标签:
【中文标题】获取和设置相机设置【英文标题】: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
【问题讨论】:
【参考方案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,您可以在固定分辨率下修改曝光时间。
【讨论】:
以上是关于获取和设置相机设置的主要内容,如果未能解决你的问题,请参考以下文章