有没有办法使用 Python 和 OpenCV 调整网络摄像头的快门速度或曝光时间

Is there a way to adjust shutter speed or exposure time of a webcam using Python and OpenCV

在我的机器人视觉项目中,我需要检测移动物体的标记,但运动会导致图像模糊。反卷积方法非常慢。所以我想使用更高 fps 的相机。有人说我不需要更高的fps,我需要更短的曝光时间。

OpenCV 的 Python 接口 cv2 提供了一种更改相机设置的方法,但它不包括 "Exposure Time" 或 "Shutter Speed" 设置。我也怕网络摄像头连这种设置都不支持

关于以下方面的任何其他想法:

使用相机设置消除模糊效果?

具有实时性能的图像恢复?

关于用于实时机器人应用的低成本相机有什么建议吗?

OpenCV 中有一种方法可以更改 VideoCapture 对象的属性,该方法可用于设置输入图像的曝光。

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_EXPOSURE, 40) 

但并非所有相机都支持此参数。每种相机类型都提供不同的界面来设置其参数。 OpenCV 代码中有很多分支来支持尽可能多的分支,但当然不会涵盖所有可能性。

我的相机也是如此。所以我不得不找到一个不同的解决方案。那是从命令行终端使用 v4l2_ctl 实用程序。

v4l2-ctl -d /dev/video0 -c exposure_absolute=40

但这仅保留当前视频会话的值。这意味着你必须先开始视频预览,然后设置这个 属性 一旦 VideoCapture 松开,曝光值将恢复为默认值。

我想在我的 python 脚本中控制曝光,所以我将 subprocess 模块用于 运行 linux bash 命令。例如

import subprocess
subprocess.check_call("v4l2-ctl -d /dev/video0 -c exposure_absolute=40",shell=True)