MATLAB之VideoReader( )类:
1、VideoReader() - 该函数用于读取视频文件对象。
函数调用格式:
vid= VideoReader(filename); % 创建对象 vid,用于从名为 filename 的文件读取视频数据。
vid = VideoReader(filename,Name,Value); %使用名称-值对组设置属性 CurrentTime、Tag 和 UserData。例如,VideoReader('myfile.mp4','CurrentTime',1.2) 开始读取 1.2 秒的视频。您可以指定多个名称-值对组。将每个属性名称和后面的值用单引号括起来。
其中vid为结构体,包括如下成员:
Name - 视频文件名
Path - 视频文件路径
Duration - 视频的总时长(秒)
FrameRate - 视频帧速(帧/秒)
NumberOfFrames - 视频的总帧数
Height - 视频帧的高度
Width - 视频帧的宽度
BitsPerPixel - 视频帧每个像素的数据长度(比特)
VideoFormat - 视频的类型, 如 'RGB24'.
Tag - 视频对象的标识符,默认为空字符串''
Type - 视频对象的类名,默认为'VideoReader'.
UserData - 用户定义的数据,指定为任意数据类型的值。一般默认为“[ ]”
如,视频的总帧数为numFrames = vid.NumberOfFrames;
2 、该类其他对象函数:
(1)read - 读取视频帧,
注意:matlab提示:未来版本可能只支持 VideoReader.readFrame
调用格式:
video = read(vid) %获取 vid相关联的文件读取所有视频帧。
video = read(vid,index) %只读取 index 指定的帧。
video = read(___,'native') %以 VideoFormat 属性指定的格式返回数据,并且可以包含上述语法中的任何输入参数。
例:
video = read(vid, 1); % first frame only 获取第一帧
video = read(vid, [1 10]); % first 10 frames 获取前10帧
video = read(vid, Inf); % last frame only 获取最后一帧
video = read(vid, [50 Inf]); % frame 50 thru end 获取第50帧之后的帧
v=VideoReader('1.avi');
v.CurrentTime=1.5;
frame=readFrame(v); %即readFrame通过设置CurrentTime来读取指定的时间节点的图像,
也可以通过设置
v.CurrentTime=(1/v.FrameRate)*numframe;
来读取指定帧数的视频,但由于FrameRate一般是小数,故除不尽,可能存在误差,因此以后读取视频帧数还是用read。
(2)get - 获取视频对象的参数
参数的名字为上述vid对象的所有成员。
调用格式:
Value = get(vid,Name)
Values = get(vid,{Name1,...,NameN})
allValues = get(vid)
get(vid)
例:
xyloObj = VideoReader('xylophone.mpg');
xyloSize = get(xyloObj, {'Height', 'Width', 'NumberOfFrames'})
(3)set - 设置视频对象的参数,与get对应
调用格式:
set(vid,Name,Value)
set(vid,cellOfNames,cellOfValues)
set(vid,structOfProperties)
settableProperties = set(vid)
例:
newValues.Tag = 'My Tag';
newValues.UserData = {'My User Data', pi, [1 2 3 4]};
xyloObj = VideoReader('xylophone.mpg');
set(xyloObj, newValues)
或
set(xyloObj, 'Tag', 'This is my tag.');
(4)hasFrame,确定帧是否可供读取
调用格式:
tf = hasFrame(vid);
%如果存在可从文件中读取的视频帧,则 tf = hasFrame(v) 返回逻辑值 1 (true)。否则,将返回逻辑值 0 (false)。
(5)getFileFormats - 获取在该系统平台下,VideoReader可以支持读取的视频类型。
调用格式:
formats = VideoReader.getFileFormats()
(6)isPlatformSupported - 检测在当前系统平台下VideoReader是否可用
调用格式:
supported = VideoReader.isPlatformSupported()
参考文献:https://ww2.mathworks.cn/help/matlab/ref/videoreader.html