【问题标题】:cvCaptureFromCAM() / cvQueryFrame(): disable automatic image correction?cvCaptureFromCAM() / cvQueryFrame():禁用自动图像校正?
【发布时间】:2012-11-12 18:52:41
【问题描述】:

我正在使用上面提到的两个 OpenCV 函数从我的网络摄像头中检索帧。没有设置其他属性,只是使用默认参数运行。

在循环读取帧时,我可以看到图像发生变化,亮度和对比度似乎是自动调整的。看来肯定是OpenCV的操作,因为摄像头拍摄的图像没有变化,一直亮着。

那么如何禁用此自动更正功能?我找不到似乎能够胜任这项工作的房产。

【问题讨论】:

    标签: opencv camera video-capture image-capture


    【解决方案1】:

    您应该尝试使用这三个参数:

    CV_CAP_PROP_BRIGHTNESS 图像亮度(仅适用于相机) CV_CAP_PROP_CONTRAST 图像对比度(仅适用于相机) CV_CAP_PROP_SATURATION 图像饱和度(仅适用于相机)

    尝试将它们全部设置为 50。另外(如果没有帮助)尝试从 documentation 更改另一个相机捕获参数。

    【讨论】:

    • 这带来了另一个我从未找到解决方案的问题:这些值的有效范围是多少? 0..100?
    • 从opencv源(linux)我发现默认范围值为[0..255]。但是在设置参数之前,他们会从相机驱动程序中获得这个范围——所以这取决于你的环境。您尝试了哪些参数?
    • 我尝试为这些属性设置 50、5 和 1 - 但所有这些都导致图像太亮而完全无法使用。所以我决定让相机进行自动校正,然后再进行我自己的亮度/饱和度/伽马/RGB校正。与 CV_CAP_PROP_FRAME_WIDTH/_HEIGHT 的情况相同,我将相机的原始分辨率设置为 1280x960,但仍然只能返回 640x480 图像。因此,至少对于 v4l,这似乎无法按预期工作。
    【解决方案2】:

    为我自己回答这个问题:OpenCV 在这里有问题或过时。

    • 似乎不可能以相机的原始分辨率获取图像,它们始终为 640x480;也通过设置宽度和高度属性将其强制为其他值不会改变任何东西
    • 似乎无法禁用自动图像校正,上面提到的属性似乎不起作用
    • 亮度/对比度属性似乎不能正常工作 - 或者至少我找不到任何合适的值,或者自动图像校正总是会覆盖它们

    总结一下:我不建议使用 OpenCV 来进行更强大的图像捕捉。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多