我是 MATLAB 初学者,我想知道如何以 5 秒的间隔从我的相机获取和保存 20 张图像。非常感谢你。
4 回答
首先构建一个视频输入接口
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 个或更多)捕获图像,将网络摄像头视为视频源可能更有用。我已经为这个问题留下了答案,其中列出了实现这一目标的方法。
这是获取一张图片的快速教程http://www.mathworks.com/products/imaq/description5.html 你有没有得到这种东西的工作?
编辑:
既然你可以得到一张图像,你想得到二十张。您将需要一个计时器对象或一个简单的 for 循环。
请务必将“要执行的任务”字段设置为 20。此外,您应该将一张图片快照的所有代码打包到一个函数中。
有几种方法可以解决这个问题,每种方法都有优点和缺点。根据您迄今为止发布的信息,我将执行以下操作:
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 参数以更改将发生的采集次数。
这显然不会在获取图像后对图像进行任何处理。
要获取图像,相机是否带有一些记录在案的方法来从计算机控制它?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);