【问题标题】:Cannot determine number of frames using VideoReader无法使用 VideoReader 确定帧数
【发布时间】:2015-03-18 05:00:32
【问题描述】:

我已经使用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

【问题讨论】:

    标签: image matlab video image-processing frames


    【解决方案1】:

    这是因为您错误地检索了总帧数。 vid 是一个H x W x B x F 矩阵,这样:

    • H是图片帧高
    • W是图片帧宽
    • B 是图像中的波段数(例如 RGB 为 3),
    • F 是读取的帧数

    length 检索矩阵的最大维度。在这种情况下,报告为 640,这可能意味着您的视频的宽度或高度为 640 像素。这返回总帧数。如果您想要读取的总帧数,您可以使用VideoReader/read 查看您抓取的矩阵的第 4 维:

    frm_cnt = size(vid, 4);
    

    但是,如果您对视频序列中的总帧数感到好奇,您可以在 VideoReader 对象上使用 get 来获取:

    total_frames = get(xyloObj, 'numberOfFrames');
    

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2021-02-13
      • 2023-01-13
      相关资源
      最近更新 更多