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

时间:2017-08-16 12:16:33

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

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

OpenCV的Python界面const MyClickMessage = '08B52B44-748F-44BB-AC6C-5179D6C1F523'; procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); begin if frame.IsMain then frame.ExecuteJavaScript( 'document.addEventListener("click", function(evnt){' + 'console.log("' + MyClickMessage + '");' + '});', '', 0); end; procedure TForm1.Chromium1ConsoleMessage(Sender: TObject; const browser: ICefBrowser; const message, source: ustring; line: Integer; out Result: Boolean); begin if message = MyClickMessage then begin Result := True; ShowMessage('User clicked!'); end; end; 提供了一种更改摄像机设置的方法,但它不包括"曝光时间"或者"快门速度"设置。我也担心网络摄像头甚至不支持这种设置。

关于:

的任何其他想法

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

OR

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

OR

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

1 个答案:

答案 0 :(得分:10)

有一种方法可用于更改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命令。 e.g。

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