有没有办法使用 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)
在我的机器人视觉项目中,我需要检测移动物体的标记,但运动会导致图像模糊。反卷积方法非常慢。所以我想使用更高 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)