我使用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
答案 0 :(得分:2)
那是因为您错误地检索了总帧数。 vid
是H 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');