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

Muh*_*lah 8 python robotics opencv real-time computer-vision

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

OpenCV的Python界面cv2提供了一种更改摄像机设置的方法,但它不包括"曝光时间"或"快门速度"设置.我也担心网络摄像头甚至不支持这种设置.

关于的任何其他想法:

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

要么

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

要么

关于实时机器人应用的低成本相机的任何建议?

Muh*_*lah 11

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

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_EXPOSURE, 40) 
Run Code Online (Sandbox Code Playgroud)

但是,并非所有摄像机都支持此参数.每种摄像机类型都提供不同的界面来设置其参数.OpenCV代码中有许多分支支持尽可能多的分支,但当然不是所有的可能性都包括在内.

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

v4l2-ctl -d /dev/video0 -c exposure_absolute=40
Run Code Online (Sandbox Code Playgroud)

但这只保留了当前视频会话的价值.这意味着您必须首先开始视频预览,然后设置此属性一旦释放视频捕捉,曝光值将恢复为默认值.

我想在我的python脚本中控制曝光,所以我用v4l2_ctlmodule来运行linux bash命令.例如

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

  • 这里的“exposure_absolute”是什么?这是时候吗?或者这里的“40”到底是什么? (3认同)
  • 哇。我不知道我搜索了多少种“ opencv python Exposure webcam”或类似的咒语,但是我自己做完这三小时后才发现!供参考[这里](https://gist.github.com/jwhendy/12bf558011fe5ff58bd5849954e84af4)要点展示了一种解决方法。我对python很陌生,但是我认为dict方法对于循环进行许多设置是否合理? (2认同)