vido = videoinput('winvideo',1);
vido.FrameGrabInterval = 10;
start(vido)
while(vido.FramesAcquired<=30)
data = getsnapshot(vido);
imshow(data);
flushdata(vido);
end
嗨。我有上面的代码。它正在工作但是从内存中为每个快照发生。例如它的星星600mb,610,620 ......为什么?我怎么能阻止这个?
答案 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