Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

readFrame

读取下一个视频帧

说明

示例

video = readFrame(v) 从与 v 关联的文件中读取下一个可用的视频帧。

video = readFrame(v,'native') 返回由 VideoFormat 属性指定的格式的数据。

示例

全部折叠

为示例影片文件 xylophone.mp4 创建一个VideoReader 对象。

v = VideoReader('xylophone.mp4');

读取视频中的所有帧,一次一帧。

while hasFrame(v)
    frame = readFrame(v);
end

显示 readFrame 返回的最后一帧的有关信息。

whos frame
  Name         Size                Bytes  Class    Attributes

  frame      240x320x3            230400  uint8              

创建一个视频读取器对象,并从特定时间开始读取视频帧。

创建一个对象来读取示例影片文件 xylophone.mp4

v = VideoReader('xylophone.mp4');

指定在距视频开头 2.5 秒的位置开始读取。

v.CurrentTime = 2.5;

创建一个坐标区对象以显示帧。然后,继续读取和显示视频帧,直到没有可供读取的帧为止。

currAxes = axes;
while hasFrame(v)
    vidFrame = readFrame(v);
    image(vidFrame, 'Parent', currAxes);
    currAxes.Visible = 'off';
    pause(1/v.FrameRate);
end

读取并播放示例影片文件 xylophone.mp4

创建 VideoReader 对象以从示例文件读取数据。然后,确定视频的宽度和高度。

xyloObj = VideoReader('xylophone.mp4');

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

创建影片结构体数组 mov

mov = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),...
    'colormap',[]);

一次读取一帧,直到视频结束。

k = 1;
while hasFrame(xyloObj)
    mov(k).cdata = readFrame(xyloObj);
    k = k+1;
end

基于视频的宽度和高度确定图窗大小。然后,按照视频的帧速率播放一次影片。

hf = figure;
set(hf,'position',[150 150 vidWidth vidHeight]);

movie(hf,mov,1,xyloObj.FrameRate);

输入参数

全部折叠

输入 VideoReader 对象。使用 VideoReader 函数根据您的视频文件创建一个 VideoReader 对象。

输出参数

全部折叠

视频帧数据,以数组的形式返回。video 的维度和数据类型取决于 objVideoFormat 属性。

下表列出了大多数文件的 video 的数据类型和维度。H 是图像帧高度,W 是图像帧宽度。如果 objVideoFormat 属性为 'Indexed',则 video 的数据类型和维度取决于您是否调用 readFrame'native' 参数。

obj.VideoFormat 的值video 的数据类型video 的维度描述
'RGB24',指定或不指定 'native'uint8

H×W×3

RGB24 图片

'Grayscale',不指定 'native'uint8

H×W×1

灰度图片

'Indexed',不指定 'native'uint8

H×W×3

RGB24 图片

'Grayscale''Indexed',指定 'native'struct

1×1

MATLAB® 影片,是由帧结构体数组构成的数组,每个数组都包含 cdatacolormap

对于 Motion JPEG 2000 文件,video 的数据类型和维度如下所示。

obj.VideoFormat 的值video 的数据类型video 的维度描述
'Mono8'uint8

H×W×1

黑白图片

'Mono8 Signed'int8

H×W×1

黑白签名图片

'Mono16'uint16

H×W×1

黑白图片

'Mono16 Signed'int16

H×W×1

黑白签名图片

'RGB24'uint8

H×W×3

RGB24 图片

'RGB24 Signed'int8

H×W×3

RGB24 签名图片

'RGB48'uint16

H×W×3

RGB48 图片

'RGB48 Signed'int16

H×W×3

RGB48 签名图片

局限性

  • 对于 Windows® 上的某些 AVI、MOV 或 MP4 文件,使用 readFrame 函数读取文件中的所有帧可能会导致帧数不同于 VideoReader 对象的 NumFrames 属性返回的值。

扩展功能

版本历史记录

在 R2014b 中推出