readFrame
读取下一个视频帧
说明
示例
为示例视频文件 xylophone_video.mp4 创建一个 VideoReader 对象。
v = VideoReader("xylophone_video.mp4");读取视频中的所有帧,一次一帧。
while hasFrame(v) frame = readFrame(v); end
显示 readFrame 返回的最后一帧的有关信息。
whos frameName 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 的维度和数据类型取决于 obj 的 VideoFormat 属性。
下表列出了大多数文件的 video 的数据类型和维度。H 是图像帧高度,W 是图像帧宽度。如果 obj 的 VideoFormat 属性为 'Indexed',则 video 的数据类型和维度取决于您是否调用 readFrame 和 'native' 参量。
obj.VideoFormat 的值 | video 的数据类型 | video 的维度 | 描述 |
|---|---|---|---|
'RGB24',指定或不指定 'native' | uint8 |
| RGB24 图片 |
'Grayscale',不指定 'native' | uint8 |
| 灰度图片 |
'Indexed',不指定 'native' | uint8 |
| RGB24 图片 |
'Grayscale' 或 'Indexed',指定 'native' | struct | 1×1 | MATLAB® 影片,是由帧结构体数组构成的数组,每个数组都包含 |
对于 Motion JPEG 2000 文件,video 的数据类型和维度如下所示。
obj.VideoFormat 的值 | video 的数据类型 | video 的维度 | 描述 |
|---|---|---|---|
'Mono8' | uint8 |
| 黑白图片 |
'Mono8 Signed' | int8 |
| 黑白签名图片 |
'Mono16' | uint16 |
| 黑白图片 |
'Mono16 Signed' | int16 |
| 黑白签名图片 |
'RGB24' | uint8 |
| RGB24 图片 |
'RGB24 Signed' | int8 |
| RGB24 签名图片 |
'RGB48' | uint16 |
| RGB48 图片 |
'RGB48 Signed' | int16 |
| RGB48 签名图片 |
限制
对于 Windows® 上的某些 AVI、MOV 或 MP4 文件,使用
readFrame函数读取文件中的所有帧可能会导致帧数不同于VideoReader对象的NumFrames属性返回的值。
扩展功能
用法说明和限制:
readFrame的代码生成不支持可选的位置参量native。生成使用行优先布局的代码 - Generate Code That Uses Row-Major Array Layout (MATLAB Coder)。
数组大小限制 - 对于代码生成,数组元素的最大数量受代码生成器和目标硬件的限制。有关详细信息,请参阅代码生成的数组大小限制 (MATLAB Coder)。
版本历史记录
在 R2014b 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)