3

我是 MATLAB 初学者,我想知道如何以 5 秒的间隔从我的相机获取和保存 20 张图像。非常感谢你。

4

4 回答 4

6

首先构建一个视频输入接口

vid = videoinput('winvideo',1,'RGB24_400x300');

您需要调整网络摄像头的最后一位。要查找网络摄像头设备(以及除此之外的其他东西)列表,请使用:

imaqhwinfo

下面将第一个网络摄像头变成一个对象

a=imaqhwinfo('winvideo',1)

查找支持的视频格式列表

a.SupportedFormats

然后,您将要启动界面:

start(vid);
preview(vid);

现在您可以执行以下操作:

pics=cell(1,20)
for i=1:20
   pause(5);
   pics{i}=getsnapshot(vid);
end

或者,正如其他评论员所指出的,您也可以使用 Matlab 计时器作为间隔。

如果您希望以相当短的间隔(每秒 1 个或更多)捕获图像,将网络摄像头视为视频源可能更有用。我已经为这个问题留下了答案,其中列出了实现这一目标的方法。

于 2012-09-20T09:37:12.950 回答
1

这是获取一张图片的快速教程http://www.mathworks.com/products/imaq/description5.html 你有没有得到这种东西的工作?

编辑:

既然你可以得到一张图像,你想得到二十张。您将需要一个计时器对象或一个简单的 for 循环。

简单的计时器对象示例

MATLAB 中定时器的视频示例

请务必将“要执行的任务”字段设置为 20。此外,您应该将一张图片快照的所有代码打包到一个函数中。

于 2009-09-23T18:41:20.970 回答
1

有几种方法可以解决这个问题,每种方法都有优点和缺点。根据您迄今为止发布的信息,我将执行以下操作:

vid = videoinput('dcam', 1'); % Change for your hardware of course.
vid.FramesPerTrigger = 20;
vid.TriggerRepeat = inf;
triggerconfig(vid, 'manual');
vid.TimerFcn = 'trigger(vid)';
vid.TimerPeriod = 5;
start(vid);

这将每 5 秒获取 20 张图像,直到您调用 STOP。您可以更改 TriggerRepeat 参数以更改将发生的采集次数。

这显然不会在获取图像后对图像进行任何处理。

于 2009-09-24T12:54:13.070 回答
0

要获取图像,相机是否带有一些记录在案的方法来从计算机控制它?MATLAB 支持链接到外部库。或者您可以按照 MatlabDoug 的建议购买合适的 MATLAB 工具箱。

要保存图像,IMWRITE可能是最简单的选项。

为了重复这个动作,一个简单的带有PAUSE的FOR循环将给你大致上你想要的东西,而且工作量很少:

 for ctr = 1:20
   img = AcquireImage(); % your function goes here
   fname = ['Image' num2str(ctr)]; % make a file name
   imwrite(img, fname, 'TIFF');
   pause(5); % or whatever number suits your needs
 end

但是,如果您需要精确的 5 秒间隔,则必须深入研究TIMER。这是一个简单的例子:

function AcquireAndSave
  persistent FileNum;
  if isempty(FileNum)
    FileNum = 1;
  end
  img = AcquireImage();
  fname = ['Image' num2str(FileNum)];
  imwrite(img, fname, 'TIFF');
  disp(['Just saved image ' fname]);
  FileNum = FileNum + 1;
end

>> t = timer('TimerFcn', 'ShowTime', 'Period', 5.0, 'ExecutionMode', 'fixedRate');
>> start(t); 
...you should see the disp line from AcquireAndSave repeat every 5 seconds...
>> stop(t);
>> delete(t);
于 2009-09-23T21:13:21.013 回答