有没有办法使用Python和OpenCV来调整摄像头的快门速度或曝光时间
在我的机器人视觉项目中,我需要检测运动物体的标记,但运动会导致图像中出现模糊效果。解卷积方法非常缓慢。所以我正在考虑使用更高的fps相机。有人说我不需要更高的fps,相反我需要更短的曝光时间。有没有办法使用Python和OpenCV来调整摄像头的快门速度或曝光时间
OpenCV的Python界面cv2
提供了一种更改相机设置但不包括“曝光时间”或“快门速度”设置的方法。我也担心摄像头甚至不支持这种设置。
任何其他想法:
使用相机设置消除模糊效果?
或
恢复与实时性能的图像?
OR
约低成本的摄像头进行实时机器人应用任何建议?
有一种方法可以改变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)
哇。我不知道有多少种'opencv python exposure webcam'或者类似的搜索词,但是我自己做了这个3小时后才发现!作为参考[这里](https://gist.github.com/jwhendy/12bf558011fe5ff58bd5849954e84af4)的一个要点,显示了一种方式来做这些。我是'python'的新手,但我认为dict方法对于通过很多设置进行循环是合理的? – Hendy
感谢分享@ Hendy ...这是设置摄像机多种属性的好方法。 –
是哪个摄像头? – 101
Logitech C310 USB WebCam –
你可以尝试'cap = cv2.VideoCapture(0);打印cap.get(cv2.cv.CV_CAP_PROP_EXPOSURE)'。 – 101