matlab如何显示快照?
Matlab how to display snapshots?
vido = videoinput('winvideo',1);
vido.FrameGrabInterval = 10;
start(vido)
while(vido.FramesAcquired<=30)
data = getsnapshot(vido);
imshow(data);
flushdata(vido);
end
Hi.I 代码 above.It 正在运行,但每个 snapshot.For 示例都是从内存中生成的 600mb,610,620...为什么?我该如何防止这种情况?
您很可能不会在完成后删除视频对象。每次 运行 此代码时,您都会继续创建视频对象,即使您从源中抓取 30 帧并在该点之后停止捕获。因此,请确保在 while
循环结束 delete
时删除视频对象。
此外,您已经指出 imshow
是您不断获得内存增加的原因。它实际上不应该,但如果你真的那么担心,你可以生成一个空白图形,然后获取 imshow
window 的句柄。接下来,您可以简单地为您读入的每一帧更新 window... 所以:
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
vido = videoinput('winvideo',1);
vido.FrameGrabInterval = 10;
start(vido)
while(vido.FramesAcquired<=30)
data = getsnapshot(vido);
imshow(data);
flushdata(vido);
end
Hi.I 代码 above.It 正在运行,但每个 snapshot.For 示例都是从内存中生成的 600mb,610,620...为什么?我该如何防止这种情况?
您很可能不会在完成后删除视频对象。每次 运行 此代码时,您都会继续创建视频对象,即使您从源中抓取 30 帧并在该点之后停止捕获。因此,请确保在 while
循环结束 delete
时删除视频对象。
此外,您已经指出 imshow
是您不断获得内存增加的原因。它实际上不应该,但如果你真的那么担心,你可以生成一个空白图形,然后获取 imshow
window 的句柄。接下来,您可以简单地为您读入的每一帧更新 window... 所以:
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