一、读取视频文件
mov=aviread(filename); mov=aviread(filename,index);aviinfo:返回一个结构,其场中包含有关将AVI文件作为参数调用的信息(如,帧宽度和高度、总帧数、帧率、文件尺寸等)
mmreader:构建一个多媒体读者对象,它可读取多种多媒体文件格式里的视频数据。
使用frame2im将帧转化为一副图像。
使用im2frame将结果转换回帧。
avifile:生成一个新的AVI文件,其后它可被用视频按不同方式填充。
movie2avi:从一个MATLAB的movie来生成一个AVI文件。
示例
1、读取视频文件有关信息file_name='bike.avi'; file_info=aviinfo(file_name); //读取一个视频文件的信息,并将其存入一个局部变量。 file_info.VideoCompression //观察这个文件的压缩 file_info.NumFrames //观察这个文件帧数2、读取一个视频文件
my_movie=aviread(file_name);//使用函数aviread将bike.avi文件载入//载入5,10,15,20个帧 frame_nums=[5 10 15 20]; my_movie2=aviread(file_name,frame_nums); //检查结构my_movie2的第一帧 my_movie(1) 使用函数imshow将第一帧看作一幅图像 imshow(my_movie(1).cdata)
使用默认设置播放视频
movie(my_movie)
用30fps的帧率播放视频5次
movie(my_movie,5,30)
仅播放第1帧到第10帧frames=[5 1:10]; movie(my_movie,frames,30)
将第10帧转化为一幅图像并进一步处理
old_img=frame2im(my_movie(10));
clc;
video=mmreader('E:\\图片\\视频材料\\bike.avi');
nFrames=video.NumberOfFrames; %得到帧数
H=video.Height; %得到高度
W=video.Width; %得到宽度
Rate=video.FrameRate; %重新分配视频结构
mov(1:nFrames)=struct('cdata',zeros(H,W,3,'uint8'),'colormap',[]);
%每次读取一帧
for i=1:nFrames
mov(i).cdata=read(video,i);
P=mov(i).cdata;
disp('当前播帧数:'),disp(i);
imshow(P),title('原始图片');
%P2=rgb2gray(P);
end
clear;
运行结果:
matlab2012已经抛弃了aviread和mmread,现在采用的是VideoReader
1、读取视频并将每一帧保存成图片
示例代码及运行结果
fileName = 'E:\\图片\\视频材料\\bike.avi'; numFrames = obj.NumberOfFrames;% 帧的总数 for k = 1 : numFrames % 读取数据 frame = read(obj,k); imshow(frame); %显示帧 imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 保存帧 end
obj = VideoReader(fileName);
运行结果