我尝试通过python将See3Cam_CU130网络摄像头的白平衡设置设置为单个值。这是为了防止在我的分析过程中白平衡发生变化并干扰结果。我认为最好的方法是:
要做到这一点,我尝试过跑步:
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
上测试的答案 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