[英]How do I retrieve images within Postgres into Matlab using Java?
[英]How do I Acquire Images at Timed Intervals using MATLAB?
我是MATLAB的初学者,我想知道如何以5秒的间隔从相机获取和保存20张图像。 非常感谢你。
首先构造一个视频输入界面
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循环。
确保将“要执行的任务”字段设置为二十。 同样,您应该将一张图片捕捉的所有代码包装到一个函数中。
有几种解决方法,每种都有优点和缺点。 根据您到目前为止发布的信息,以下是我的处理方法:
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参数以更改采集发生的次数。
显然,在获取图像后,不会对图像进行任何处理。
要获取图像,相机是否具有某种记录的方法可以从计算机进行控制? MATLAB支持链接到外部库 。 或者,您可以按照MatlabDoug的建议购买合适的MATLAB工具箱。
要保存图像, IMWRITE可能是最简单的选择。
要重复该操作,只需执行一个带有暂停的简单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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.