readFrame
读取下一个视频帧
说明
示例
创建 VideoReader 对象并读取视频
为示例影片文件 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);
输入参数
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)。
数组大小限制 - 对于代码生成,数组元素的最大数量受代码生成器和目标硬件的限制。有关详细信息,请参阅Array Size Restrictions for Code Generation (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)