有很多,而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.cdataimg = 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文件。 参数说明表:
用户也可以使用结构语法来设置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] = peaksfor 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)
function avi2pic(avifile,pickind)%function avi2pic(avifile,pickind)
% avifile-- the avi filename,like 'darnshong.avi','ioe.avi',etc
% pickind-- the kind of image format,like 'jpg','bmp',etc
% supported export image
% format:'jpg','jpeg','bmp','tiff','tif','gif','png',etc
mov=aviread(avifile)
temp=size(mov)
fnum=temp(2)
for i=1:fnum,
strtemp=strcat(int2str(i),'.',pickind)
imwrite(mov(i).cdata(:,:,:),mov(i).colormap,strtemp)
end
如果error imwrite的话
就用inshow 自己查下
给你工具书吧。所有的M里图像处理命令:
http://mcm.ustc.edu.cn/download/matlab11.pdf
希望对你有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)