Ale*_*xey 5 matlab image-processing
我需要在Matlab图形中尽快显示更新的图像。每个图像都会被处理然后显示。但是,彩色图像的显示速度相当慢。例如,当我运行以下代码时
videoObj = VideoReader('sample.avi');
nFrames = videoObj.NumberOfFrames;
h = videoObj.Height;
w = videoObj.Width;
mov(1:nFrames) = struct('cdata', zeros(h, w, 3, 'uint8'), 'colormap', []);
for k = 1 : nFrames
mov(k).cdata = read(interObj, k);
end
tic
for i=1:nFrames
frame = mov(i).cdata;
image(frame);
drawnow;
end
secPerFrame = toc/nFrames
Run Code Online (Sandbox Code Playgroud)
secPerFrame = 0.012更新每一帧需要几秒钟。其中每帧是640x480像素RGB图像。因此,如果我想以每秒30帧的速度处理视频流,那么0.033 - 0.012 = 0.021在减去与图像显示相关的开销后,实际的图像处理仅剩下“ 几秒钟”的时间。
有没有一种更快的方法来更新Matlab中的图像对象?
如果所有图像的大小相同,您可以使用该image命令一次,然后更新CData坐标区的属性。
videoObj = VideoReader('sample.avi');
nFrames = videoObj.NumberOfFrames;
mov(1:nFrames) = ...
struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'), 'colormap', []);
for k = 1 : nFrames
mov(k).cdata = read(interObj, k);
end
tic
image(mov(1).cdata);
imageHandle = get(gca,'Children');
for i=1:number
frame = mov(i).cdata;
set(imageHandle ,'CData',frame);
drawnow;
end
secPerFrame = toc/number
Run Code Online (Sandbox Code Playgroud)
这仍然会很慢,因为 Matlab 图形没有针对显示视频进行优化。如果应用程序允许进行预处理,则将其作为电影文件保存到磁盘,并调用外部程序进行显示。
| 归档时间: |
|
| 查看次数: |
6780 次 |
| 最近记录: |