无法使用 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');