How do I Acquire Images at Timed Intervals using MATLAB?

夙愿已清 提交于 2019-12-22 09:49:37

问题


I'm a MATLAB beginner and I would like to know how I can acquire and save 20 images at 5 second intervals from my camera. Thank you very much.


回答1:


To acquire the image, does the camera comes with some documented way to control it from a computer? MATLAB supports linking to outside libraries. Or you can buy the appropriate MATLAB toolbox as suggested by MatlabDoug.

To save the image, IMWRITE is probably the easiest option.

To repeat the action, a simple FOR loop with a PAUSE will give you roughly what you want with very little work:

 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

If, however, you need exact 5 second intervals, you'll have to dive into TIMERs. Here's a simple example:

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);



回答2:


First construct a video input interface

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

You'll need to adjust the last bit for your webcam. To find a list of webcam devices (and other things besides) use:

imaqhwinfo

The following makes the first webcam into an object

a=imaqhwinfo('winvideo',1)

Find the list of supported video formats with

a.SupportedFormats

You'll then want to start up the interface:

start(vid);
preview(vid);

Now you can do the following:

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

Or, as other commentators have noted, you could also use a Matlab timer for the interval.

If you wish to capture images with a considerably shorter interval (1 or more per second), it may be more useful to consider the webcam as a video source. I've left an answer to this question which lays out methods for achieving that.




回答3:


There are several ways to go about this, each with advantages and disadvantages. Based on the information that you've posted so far, here is how I would do this:

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);

This will acquire 20 images every five seconds until you call STOP. You can change the TriggerRepeat parameter to change how many times acquisition will occur.

This obviously doesn't do any processing on the images after they are acquired.




回答4:


Here is a quick tutorial on getting one image http://www.mathworks.com/products/imaq/description5.html Have you gotten this kind of thing to work yet?

EDIT:

Now that you can get one image, you want to get twenty. A timer object or a simple for loop is what you are going to need.

Simple timer object example

Video example of timers in MATLAB

Be sure to set the "tasks to execute" field to twenty. Also, you should wrap up all the code you have for one picture snap into a single function.



来源:https://stackoverflow.com/questions/1467692/how-do-i-acquire-images-at-timed-intervals-using-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!