【问题标题】:Is there a way to adjust shutter speed or exposure time of a webcam using Python and OpenCV有没有办法使用 Python 和 OpenCV 调整网络摄像头的快门速度或曝光时间
【发布时间】:2018-01-24 13:59:36
【问题描述】:

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

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

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

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

以实时性能恢复图像?

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

【问题讨论】:

  • 是哪款相机?
  • 罗技 C310 USB 网络摄像头
  • 你可以试试cap = cv2.VideoCapture(0); print cap.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
  • 它改变曝光而不是曝光时间/快门速度。生成的图像变得更亮或更暗。不影响模糊。

标签: python opencv computer-vision real-time robotics


【解决方案1】:

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)

【讨论】:

  • 哇。我不知道我搜索了多少 opencv python exposure webcam 或类似的咒语,但我自己做了这件事 3 小时后才发现这个!供参考here's 一个要点,展示了一种方法来做这些事情。我是 python 的新手,但我认为 dict 方法对于循环进行大量设置是合理的?
  • 感谢分享@Hendy ...这是设置摄像机多个属性的好方法。
  • exposure_absolute这里是什么?这是时候了吗?或者这里的40 到底是什么?
猜你喜欢
  • 2013-12-28
  • 2012-11-21
  • 1970-01-01
  • 2022-06-30
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
相关资源
最近更新 更多