无法使用VideoReader确定帧数

时间:2015-01-20 03:33:57

标签: image matlab video image-processing frames

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

1 个答案:

答案 0 :(得分:2)

那是因为您错误地检索了总帧数。 vidH x W x B x F矩阵,因此:

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

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

frm_cnt = size(vid, 4);

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

total_frames = get(xyloObj, 'numberOfFrames');