MATLAB中图形更新的加速帧率
我在MATLAB的视频中读到如下内容:MATLAB中图形更新的加速帧率,matlab,video,frame-rate,Matlab,Video,Frame Rate,我在MATLAB的视频中读到如下内容: v = VideoReader('testvid.wmv') cnt = 0; while hasFrame(v) cnt = cnt + 1; video(cnt,:,:,:) = readFrame(v); end 如果我签出视频对象,我会告诉我视频有24帧。 但是,如果在读取后直接显示它(因此基本上是在for循环内部以每秒大约5帧的速度显示) 这就是为什么我像上面的代码那样编写它,这样框架就可以被预先存储到工作区中,现在我可以像这
v = VideoReader('testvid.wmv')
cnt = 0;
while hasFrame(v)
cnt = cnt + 1;
video(cnt,:,:,:) = readFrame(v);
end
如果我签出视频对象,我会告诉我视频有24帧。
但是,如果在读取后直接显示它(因此基本上是在for循环内部以每秒大约5帧的速度显示)
这就是为什么我像上面的代码那样编写它,这样框架就可以被预先存储到工作区中,现在我可以像这样显示它们
figure
for i=1:cnt
tic
imshow(squeeze(video(i,:,:,:)))
toc
end
然而,我仍然只能得到10帧-MATLAB是否在这个方向受到限制?是否有更好的方法在MATLAB中以足够快的帧速率显示视频?您可以更新绘图CData,而不是每次都重新填充它
% Prepare 24 fake RGB coloured frames
A = randn(100,100,3,24);
figure
% Time the frame display time when replotting
tic
for k = 1 : 24
h = imshow(A(:,:,:,k));
drawnow
end
t = toc;
disp(t / 24)
% Time the frame display time when updating CData
tic
for k = 1 : 24
if k == 1
% Create the image object
h = imshow(A(:,:,:,k));
else
% Update the Cdata property of image
set(h , 'cdata' , A(:,:,:,k));
end
drawnow
end
t = toc;
disp(t / 24)
我的输出是:
因此,我在更新CData时得到了十倍的改进。这实际上比每秒24帧更快!您可以更新绘图CData,而不是每次都重新填充它
% Prepare 24 fake RGB coloured frames
A = randn(100,100,3,24);
figure
% Time the frame display time when replotting
tic
for k = 1 : 24
h = imshow(A(:,:,:,k));
drawnow
end
t = toc;
disp(t / 24)
% Time the frame display time when updating CData
tic
for k = 1 : 24
if k == 1
% Create the image object
h = imshow(A(:,:,:,k));
else
% Update the Cdata property of image
set(h , 'cdata' , A(:,:,:,k));
end
drawnow
end
t = toc;
disp(t / 24)
我的输出是:
因此,我在更新CData时得到了十倍的改进。这实际上比每秒24帧快!每秒有24帧,就像在视频中一样,在视频播放器中播放的速度很快。如你所知,MATLAB不是视频播放器,所以它会尽可能快地绘制内容。实际上,你不是在复制视频,而是告诉MATLAB“尽可能快地逐个显示这些图像”。如果你有一台功能强大的计算机,它甚至可以比24/s更快地显示它们。但是,你可以做的一件事是让MATLAB打开VLC来读取你的电影文件。如果你想这样做,请参阅命令。每秒有24帧,就像在视频中一样,在视频播放器中播放的速度很快。如你所知,MATLAB不是视频播放器,所以它会尽可能快地绘制内容。实际上,你不是在复制视频,而是告诉MATLAB“尽可能快地逐个显示这些图像”。如果你有一台功能强大的计算机,它甚至可能以超过24/s的速度显示它们。但你可以做的一件事是让MATLAB打开VLC来读取你的电影文件。如果你想这样做,请参阅命令