在我的机器人视觉项目中,我需要检测运动物体的标记,但运动会导致图像模糊。反卷积方法非常慢。所以我想用更高的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
有关实时机器人应用的低成本相机的任何建议吗?
答案 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)