无法使用 VideoReader 确定帧数
Cannot determine number of frames using VideoReader
我使用 VideoReader
在 MATLAB 中加载了一个视频并将其转换为帧。但是,我只看了200帧,就保存下来了。对于读取的这 200 帧,当前文件夹中保存了 640 张图像。
200帧怎么变成640张?
我写的代码如下图:
xyloObj = VideoReader(filename);
vid = read(xyloObj,[1 200]);
frm_cnt=length(vid);
str2='.jpg';
for i=1:frm_cnt
frm(i)=aviread(filename,i); % read the Video file
frm_name=frame2im(frm(i)); % Convert Frame to image file
filename1=strcat( num2str(i),str2);
imwrite(frm_name,filename1); % Write image file
end
那是因为您检索的总帧数不正确。 vid
是一个 H x W x B x F
矩阵,这样:
H
为图片帧高
W
为图片帧宽
B
是图像中的波段数(例如 RGB 为 3),
F
是读取的帧数
length
检索矩阵的 最大 维度。在这种情况下,这是报告 640,这可能意味着您的视频的宽度或高度为 640 像素。这不return总帧数。如果你想要读入的总帧数,你可以使用 VideoReader/read
:
查看你抓取的矩阵的第 4 维
frm_cnt = size(vid, 4);
但是,如果您想知道视频序列中总共有多少帧,可以在 VideoReader
对象上使用 get
来获得:
total_frames = get(xyloObj, 'numberOfFrames');
我使用 VideoReader
在 MATLAB 中加载了一个视频并将其转换为帧。但是,我只看了200帧,就保存下来了。对于读取的这 200 帧,当前文件夹中保存了 640 张图像。
200帧怎么变成640张?
我写的代码如下图:
xyloObj = VideoReader(filename);
vid = read(xyloObj,[1 200]);
frm_cnt=length(vid);
str2='.jpg';
for i=1:frm_cnt
frm(i)=aviread(filename,i); % read the Video file
frm_name=frame2im(frm(i)); % Convert Frame to image file
filename1=strcat( num2str(i),str2);
imwrite(frm_name,filename1); % Write image file
end
那是因为您检索的总帧数不正确。 vid
是一个 H x W x B x F
矩阵,这样:
H
为图片帧高W
为图片帧宽B
是图像中的波段数(例如 RGB 为 3),F
是读取的帧数
length
检索矩阵的 最大 维度。在这种情况下,这是报告 640,这可能意味着您的视频的宽度或高度为 640 像素。这不return总帧数。如果你想要读入的总帧数,你可以使用 VideoReader/read
:
frm_cnt = size(vid, 4);
但是,如果您想知道视频序列中总共有多少帧,可以在 VideoReader
对象上使用 get
来获得:
total_frames = get(xyloObj, 'numberOfFrames');