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

问题描述:

在我的机器人视觉项目中,我需要检测运动物体的标记,但运动会导致图像中出现模糊效果。解卷积方法非常缓慢。所以我正在考虑使用更高的fps相机。有人说我不需要更高的fps,相反我需要更短的曝光时间。有没有办法使用Python和OpenCV来调整摄像头的快门速度或曝光时间

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

任何其他想法:

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

恢复与实时性能的图像?

OR

约低成本的摄像头进行实时机器人应用任何建议?

+0

是哪个摄像头? – 101

+0

Logitech C310 USB WebCam –

+0

你可以尝试'cap = cv2.VideoCapture(0);打印cap.get(cv2.cv.CV_CAP_PROP_EXPOSURE)'。 – 101

有一种方法可以改变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 

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

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

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

哇。我不知道有多少种'opencv python exposure webcam'或者类似的搜索词,但是我自己做了这个3小时后才发现!作为参考[这里](https://gist.github.com/jwhendy/12bf558011fe5ff58bd5849954e84af4)的一个要点,显示了一种方式来做这些。我是'python'的新手,但我认为dict方法对于通过很多设置进行循环是合理的? – Hendy

+0

感谢分享@ Hendy ...这是设置摄像机多种属性的好方法。 –