Main Content

readFrame

读取下一个视频帧

说明

示例

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

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

示例

全部折叠

为示例视频文件 xylophone_video.mp4 创建一个 VideoReader 对象。

v = VideoReader("xylophone_video.mp4");

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

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

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

whos frame
  Name         Size                Bytes  Class    Attributes

  frame      240x320x3            230400  uint8              

清除 VideoReader 对象。

clear v

为示例视频文件 xylophone_video.mp4 创建一个 VideoReader 对象。

v = VideoReader("xylophone_video.mp4");

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

v.CurrentTime = 2.5;

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

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

清除 VideoReader 对象。

clear v

为示例视频文件 xylophone_video.mp4 创建一个 VideoReader 对象。然后,确定视频的宽度和高度。

xyloObj = VideoReader("xylophone_video.mp4");
vidWidth = xyloObj.Width;
vidHeight = xyloObj.Height;

创建一个视频结构体数组。

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

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

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

基于视频的宽度和高度调整图窗大小,然后播放一次视频。

vf = figure(Position=[0 0 xyloObj.Width xyloObj.Height]);
imshow(mov(1).cdata,Border="tight")
movie(vf,mov,1,xyloObj.FrameRate)

清除 VideoReader 对象。

clear xyloObj

输入参数

全部折叠

输入 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 中推出