MATLAB对视频文件的读取与格式转换

有哪位高手可以告诉小弟:怎样用MATLAB读取视频文件,然后将该视频文件转换格式(为了以后搞什么视频跟踪)我是个新手,大家来帮帮忙啊... 有哪位高手可以告诉小弟:怎样用MATLAB读取视频文件,然后将该视频文件转换格式(为了以后搞什么视频跟踪)
我是个新手,大家来帮帮忙啊
展开
 我来答
西瓜爱人FF
2015-05-28 · TA获得超过2767个赞
知道答主
回答量:299
采纳率:80%
帮助的人:103万
展开全部
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文件。 参数说明表:

用户也可以使用结构语法来设置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);
wandazui
2009-10-07 · TA获得超过298个赞
知道答主
回答量:84
采纳率:0%
帮助的人:94.4万
展开全部
matlab只能读avi格式的视频,而且还不是所有的avi格式都能读取,只能读取某些格式的avi(avi格式是N多视频格式的统称)。使用aviread函数,用法如下:

mov = aviread(filename)
mov = aviread(filename, index)

读入matlab中的是许多图像,数目等同于视频帧数。

视频转换格式涉及到对视频编码的问题,这个单用matlab几乎不可能搞定,除非你自己看标准写编码程序。或者用专门的视频格式转换程序。

话说回来,搞视频跟踪也用不着转换什么视频文件格式,直接处理读入的帧就可以了。

最后说下,视频这东西最好还是用VC搞,matlab处理视频实在太慢了,当然,你要是不要求实时处理另当别论。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式