matlab读取/播放视频的函数(2)

来源:互联网 发布:水冷 风冷 知乎 编辑:程序博客网 时间:2024/06/05 15:20
1、用matlab读取avi 视频(只能读一定压缩各式的avi 电影,这是因为avi视频文件的编码
有很多,而matlab只支持部分编码格式。可见
http://blog.csdn.net/IdoIwill/article/details/2125838) aviinfo('d:\abc.avi');  
%显示存在d 盘文件abc.avi 的信息,在matlab2010 版本中,该函数可以换成mmreader mov=aviread('abc:.avi');   %读入电影abc.avi movie(mov);             %放映电影  
2、将avi视频转成图片序列 
mov=aviread('d:\abc.avi'); %读入 
Vframes=size(mov,2);   %读取视频的帧数,mov 为1*1179 struct,struct就是第4点所介绍的 for i=1: Vframes 
strtemp=strcat('d:\转换的图片\',int2str(i),'.','jpg'); %将每帧转成.jpg 的图片 imwrite(mov(i).cdata(:,:,), mov(i).colormap, strtemp);  % 把图像写入磁盘 end  
3、读取avi视频第index帧有三种使用方式(不适用于索引图): 
第一种:mov=aviread(filename);   % 读入视频 
frame=mov(index);       %读取avi 文件的第index 帧图像; img = frame.cdata;        % 读取图像的颜色信息 
第二种:frame = aviread(filename, index);          img = frame.cdata; 
第三种:mov = aviread(filename);         frame = mov.cdata;         img = mov{index}; 例:%读取第一帧图像 
mov = aviread('highwayI_raw.AVI'); frame=mov(index); imshow(frame.cdata);   
4、读取avi视频第index帧图像后,所储存帧格式是一个结构体(struct),该结构体有两个元素:cdata 和colormap 
例: 
frame = aviread('highwayI_raw.AVI', i); 
frame.cdata 表示了一个数据数组,彩色图像就是3 维的,灰度图像就是2 维的。也就是相当于I=imread(‘abc.jpg’)后的数组I 
frame.colormap 见(help aviread) 
%%%%%了解了以上四点,处理视频文件就可以相当于图像文件一样处理了%%%% 
5、将彩色图像转换为灰度图像,很简单: 
frame = aviread('highwayI_raw.AVI', i); 
f_gray = rgb2gray(frame.cdata); 这样就可以将文件的第i帧转换为灰度图像。  
6、 创建avi视频文件 
aviobj = avifile(filename) 
aviobj = avifile(filename, 'Param1', Val1, 'Param2', Val2,...) 描述: 
aviobj = avifile(filename) 创建一个AVI文件,其名称为filename,AVI文件对象的所有属性均取默认值。如果文件名中并不包含扩展名,则avifile为filename自动添加扩展名.avi。AVI是一种存储声音和图像数据的文件格式。 
avifile返回一个指向AVI文件对象aviobj的句柄,使用该对象在其他函数中可以引用该对象。AVI文件对象支持控制被创建的AVI文件的各方面属性和方法。 
aviobj = avifile(filename, 'Param1', Val1, 'Param2', Val2,...)使用指定的参数设置创建一个AVI文件。 参数说明表:

MATLAB <wbr>AVI <wbr>视频读取处理02
MATLAB <wbr>AVI <wbr>视频读取处理02

用户也可以使用结构语法来设置AVI对象的属性。Avifile对象的所有属性名字和参数表中的名字一样,并且要完整(除了keyframe这个参数)。例如,设定质量属性为100可以使用如下的语法
格式: 
aviobj = avifile('myavifile'); aviobj.quality = 100;  
实例 
这一实例显示如何使用函数avifile创建AVI文件example.avi。 t = linspace(0,2.5*pi,40); fact = 10*sin(t); fig=figure; 
aviobj = avifile('example.avi') [x,y,z] = peaks; for k=1:length(fact) h = surf(x,y,fact(k)*z); axis([-3 3 -3 3 -80 80]) axis off 
caxis([-90 90]) F = getframe(fig); 
aviobj = addframe(aviobj,F); end 
close(fig) 
aviobj = close(aviobj);  
7、mmreader 类---创建一个视频文件读取对象 
其实在 matlab2010 中,会建议采用mmreader、mmfileinfo等函数,如果使用aviread会出现警告如下: 
Warning: AVIREAD will be removed in a future release. Use MMREADER instead.  这是由于aviread接口需要要求avi文件时没有压缩的,这回导致其应用受到很大的 具体的mmreader 类描述可见matlab的help,以下摘自一些重点:  mmreader类 是为了创建一个读取视频文件的多媒体读取对象 描述: 
函数 mmreader可以读取所有的多媒体文件,返回值为一个结构体;然后可以用read 函数进行读取文件 
mmreader 支持的文件格式由各个操作系统平台决定 
Window: AVI(.avi)/MPEG-1(.mgp)Window Media Video(.wmv,.asf,.asx) 
Macintosh: AVI(.avi)/MPEG-1(.mpg)/MPEG(.mp4,.m4v)/苹果Quick Time movie(.mov)              以及被QuickTime在苹果系统上所支持的视频格式 
Linux:  支持系统中所安装的GStreamer 0.10 支持的视频格式,包括AVI/Ogg Theora(.ogg)  
mmreader创建视频文件有两种 obj = mmreader(filename); 
obj = mmreader(filename, ‘PropertyName’, ‘PropertyValue’); 
第一种只需提供(默认路径名)+文件名,就可以返回一个视频对象;使用第二种方法,可以设置属性名以及属性值
obj具有的属性如下:  BitsPerPixel  (只读)   视频的每个像素的位数  
Duration     (只读)   每秒的总长度 
 FrameRate   (只读)   每秒的帧率 
 Height       (只读)  视频每帧图像的高度 
 Name        (只读)  对象所对应的视频文件名 
 NumberOfFrames (只读) 视频流中的总帧数 
 Path            (只读)视频文件所在的路径名 
 Tag                  定义视频对象的标签(默认’’)  
Type            (只读) 对象的类名—mmreader
  UserData               给用户自定义数据的区域 
 VideoFormat     (只读) 视频文件压缩格式 
 Width           (只读)视频每帧图像的宽度 通常obj对象配合read方法使用;
read的使用方法如下: video = read(obj); 
video = read(obj,index); 或 video = read(obj, [index1,index2]) 
其实第一种默认是read(obj, [1,inf]) 第一种方法读入obj视频对象的所有帧; 第二种方法读入obj视频对象的第index帧. 
第一种方法返回的video对象是个4维数组,H-W-B-F H: 图像帧的高度 W: 图像帧的宽度 B: 图像帧的颜色通道 F: 图像帧的数目 
第二种方法返回就是图像帧的数据,灰度图像返回二维数组,RGB24图像返回三维数组。 读取第一帧图像例子如下 
obj = mmreader('abc.avi'); video = read(obj); img = video(:,:,:1); imshow(img);
0 0
原创粉丝点击