Matlab视频处理

来源:互联网 发布:网络招生宣传方案 编辑:程序博客网 时间:2024/04/29 06:37

一、读取视频文件

aviread:这个函数读取一个AVI电影并将其帧存入MATLAB的一个movie结构中。(新版本将用VideoReader替换aviread
  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)


3、播放一个视频文件
使用默认设置播放视频
movie(my_movie)
用30fps的帧率播放视频5次
movie(my_movie,5,30)
仅播放第1帧到第10帧
frames=[5 1:10];movie(my_movie,frames,30)


4、处理单独的帧
将第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);
运行结果
0 0