请参阅3CAM / OpenCV自动白平衡支持

时间:2017-04-27 06:14:51

标签: python opencv camera webcam

我尝试通过python将See3Cam_CU130网络摄像头的白平衡设置设置为单个值。这是为了防止在我的分析过程中白平衡发生变化并干扰结果。我认为最好的方法是:

  1. 将相机设置为自动白平衡
  2. 了解当前白平衡温度在自动
  3. 时的状态
  4. 禁用自动白平衡,并将其固定为先前的值
  5. 要做到这一点,我尝试过跑步:

    cam = cv2.VideoCapture(0)
    currentWB = cam.get(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U)
    cam.set(cv2.CAP_PROP_WHITE_BALANCE_BLUE_U, currentWB)
    

    虽然最后一行返回True,但白平衡参数仍保持自动,其值保持不变。

    如果我使用C920网络摄像头运行此代码,白平衡将按预期关闭,我可以正确获取/设置其值。

    这是See3Cam的问题,还是OpenCV对C920有更好的支持,因为它是一个更受欢迎的网络摄像头?我能做些什么来达到理想的行为吗?

    我知道我可以使用cam.set(cv2.CAP_PROP_SETTINGS, 1)打开一个dshow配置对话框,但出于显而易见的原因,我不想手动执行此操作。

    这是在Windows 10,Python 3.5.2,OpenCV 3.2.0

    上测试的

2 个答案:

答案 0 :(得分:0)

根据UVC规范,白平衡手动控制在自动模式下不会更新。因此,当控制器处于自动模式时,读取手动值是没有意义的。

答案 1 :(得分:0)

cv2.CAP_PROP_WHITE_BALANCE_BLUE_U 在 OpenCV 3.2 (https://docs.opencv.org/3.2.0/d4/d15/group__videoio__flags__base.html) 中不受支持,而且 C130 也无法单独设置颜色通道的平衡。您能做的最好的事情就是调整白平衡温度,我认为在 OpenCV 中是 cv2.CAP_PROP_TEMPERATURE

如果您使用的是 Linux,请安装 v4l2-utils 以从命令行测试这些设置,以便于调试/测试。运行 v4l2-ctl --device=/your/cam/address -L 将列出相机的可用控件及其设置(这也将告诉您您通过 OpenCV 设置的值是否已实际应用)。您可以通过设置 v4l2-ctl --device=/your/cam/address -c white_balance_temperature_auto=0 以启用手动控制,然后尝试不同的值来尝试找到一个好的白平衡温度,例如v4l2-ctl --device=/your/cam/address -c white_balance_temperature=3500