Matlab如何显示快照?

时间:2015-03-25 20:26:45

标签: matlab image-processing

vido = videoinput('winvideo',1);
vido.FrameGrabInterval = 10;
 start(vido)
while(vido.FramesAcquired<=30)
data = getsnapshot(vido);
 imshow(data);

flushdata(vido);
end

嗨。我有上面的代码。它正在工作但是从内存中为每个快照发生。例如它的星星600mb,610,620 ......为什么?我怎么能阻止这个?

1 个答案:

答案 0 :(得分:2)

完成后,您很可能删除视频对象。每次运行此代码时,您都会继续创建视频对象,即使您从源中抓取30帧并在该点之后停止捕获。因此,请确保在while循环完成delete后删除视频对象。

此外,您已声明imshow是您不断增加记忆的原因。它实际上不应该,但如果你真的那么关心,你可以产生一个空白的数字,然后抓住imshow窗口的句柄。接下来,您只需更新您读入的每个帧的窗口......所以:

hAxes = subplot(1,1,1); % //Create a blank window and get the axes handle

%// First frame flag
firstFrame = true;

vido = videoinput('winvideo',1);
vido.FrameGrabInterval = 10;
start(vido);
while(vido.FramesAcquired<=30)
   data = getsnapshot(vido);
   if firstFrame % //If first frame, show the image and get a handle to the window
      hImage = imshow(data, 'Parent', hAxes);
      firstFrame = false;
   else
      %// Simply update the window after the first frame
      set(hImage, 'CData', data);
   end
   flushdata(vido);
end

delete(vido); %// IMPORTANT