在MATLAB上处理视频的最节省内存的方法是什么?

时间:2013-05-02 19:40:03

标签: matlab video video-processing

这是阅读视频的帮助教程:

    xyloObj = VideoReader('xylophone.mpg');

    nFrames = xyloObj.NumberOfFrames;
    vidHeight = xyloObj.Height;
    vidWidth = xyloObj.Width;

    % Preallocate movie structure.
    mov(1:nFrames) = ...
        struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),...
               'colormap', []);

    % Read one frame at a time.
    for k = 1 : nFrames
        mov(k).cdata = read(xyloObj, k);
    end

    % Play back the movie once at the video's frame rate.
    movie(mov, 1, xyloObj.FrameRate);

但是我正在尝试处理一个巨大的视频,如果我尝试上面的代码,我的电脑就会耗尽内存。我已经考虑过读取一些帧,处理它们,读取更多帧,处理,直到所有帧都被处理完毕(当然,在代码进行时删除旧帧,以保留低级别的内存消耗),但是我我不确定这是最好的方法,因为我从未使用MATLAB处理视频。

这种情况有最好的做法吗?我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

处理视频的最有效内存的方法是一次加载,处理和写入一个帧。那么你在内存中只有一帧。

但是,就磁盘IO而言,这可能效率很低。任何类型的大文件的一个好方法是以块的形式处理。在这种情况下,您将一次读取,处理和写入N帧。您需要选择N以在系统上使用适当的内存量。一般来说,在你达到内存限制之前,更大的N会更快。