我是MATLAB的初学者,想知道如何从我的相机中获取并保存20张图像,每5秒一张。非常感谢。
首先构建一个视频输入接口
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
有几种方法可以解决这个问题,每种方法都有其优缺点。根据您目前发布的信息,以下是我会采取的方法:
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);
这将每五秒获取20张图像,直到您调用STOP。您可以更改TriggerRepeat参数以更改将发生多少次采集。
显然,在获取图像后,此过程不会对图像进行任何处理。
这里有一个快速教程,介绍如何获取一张图片http://www.mathworks.com/products/imaq/description5.html。你已经成功尝试过了吗?
编辑:
既然你可以获取一张图片,现在你想要获取二十张。你需要一个定时器对象或一个简单的for循环。
确保将“要执行的任务”字段设置为20。此外,你应该将所有获取一张图片所需的代码封装成一个单独的函数。
为了获取图像,相机是否有一些文档化的方法可以从计算机上进行控制?MATLAB支持链接到外部库。或者您可以购买适当的MATLAB工具箱,如MatlabDoug所建议的。
要保存图像,IMWRITE可能是最简单的选择。
要重复操作,一个简单的FOR循环和一个PAUSE将为您提供大致想要的结果,而且几乎不需要任何工作:
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);