readFrame
读取下一个视频帧
说明
示例
创建 VideoReader
对象并读取视频
为示例视频文件 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
输入参数
v
— 输入 VideoReader
对象
VideoReader
对象
输入 VideoReader
对象。使用 VideoReader
函数根据您的视频文件创建一个 VideoReader
对象。
输出参量
video
— 视频帧数据
数组
视频帧数据,以数组的形式返回。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
属性返回的值。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
readFrame
的代码生成不支持可选的位置参量native
。生成使用行优先布局的代码 - Generate Code That Uses Row-Major Array Layout (MATLAB Coder)。
数组大小限制 - 对于代码生成,数组元素的最大数量受代码生成器和目标硬件的限制。有关详细信息,请参阅代码生成的数组大小限制 (MATLAB Coder)。
版本历史记录
在 R2014b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)