注释: 通过几个小时的尝试,我现在已经是matlab2012的版本了(最高版本),我发现还是不能读取通过XVID
压缩格式的avi视频。matlab2012已经抛弃了aviread和mmread,现在采用的是VideoReader,有兴趣的可以help下。
下面的是转载资料
用matlab播放avi视频
% read image by frame
%aviFile='example.avi';
myvideo=mmreader('example.avi');
get(myvideo);
nFrames = myvideo.NumberOfFrames;
vidHeight = myvideo.Height;
vidWidth = myvideo.Width;
% Preallocate movie structure.
mov(1:nFrames) = ...
struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),...
'colormap', []);
% Read one frame at a time.
for k = 1 : nFrames
mov(k).cdata = read(myvideo, k);
end
% Size a figure based on the video's width and height.
hf = figure;
set(hf, 'position', [150 150 vidWidth vidHeight])
% Play back the movie once at the video's frame rate.
movie(hf, mov, 25, myvideo.FrameRate);
上面的这个程序只能读取未压缩的avi视频,不能读取压缩过的视频。
%aviFile='example.avi';
myvideo=mmreader('example.avi');
get(myvideo);
nFrames = myvideo.NumberOfFrames;
vidHeight = myvideo.Height;
vidWidth = myvideo.Width;
% Preallocate movie structure.
mov(1:nFrames) = ...
% Read one frame at a time.
for k = 1 : nFrames
end
% Size a figure based on the video's width and height.
hf = figure;
set(hf, 'position', [150 150 vidWidth vidHeight])
% Play back the movie once at the video's frame rate.
movie(hf, mov, 25, myvideo.FrameRate);
上面的这个程序只能读取未压缩的avi视频,不能读取压缩过的视频。
各位达人们:
你们好!不知列位有未发现:MATLAB在读取视频时不是很方便。据我所知,MATLAB只能读取有限的AVI格式的视频,即一些早期未经压缩的AVI格式(图片的序列集合),一旦图像经过压缩编码,读取便会报错。我在进行MATLAB读取视频实验的过程中,快郁闷死了。大家都知道:AVI格式不是单指哪一种视频压缩格式,确切地说,AVI不提供视频压缩功能,它更像一件衣服,可以给任意视频格式穿上这件衣服(直接把后缀改成AVI依然可以在暴风影音上播放)。但是我们的MATLAB却只能读这样形成的大约10%的AVI视频文件,这实在是让人郁闷。
我用SONY的高清DV拍了许多MTS格式的高清段子(可恶的小日本,搞什么MTS),原是想能直接导入MATLAB作视频处理用,结果发现,MATLAB读不了MTS视频。我又采取了以下两种办法,以使MATLAB可以读入我拍摄的视频:1、直接改后缀,将MTS格式改成AVI格式,这样视频可以用暴影播放但MATLAB读取报错(根本读不进去)。2、我用了十几款格式转换软件,将MTS改成里面有的所有的AVI种类格式,结果依然。 最后,我看一位达人的空间,知道了一种解码器ZJMEDIA UNCOMPRESS RGB24(WINAVI里面的)可以将视频改为早期的AVI格式(24位真彩色图片序列),终于将视频成功导入,但是代价也是很大:我的高清视频变成了摄像头视频~~
所以很无语。。。
在这里特向各位高人们请教一下,有没有用MATLAB成功导入高清视频的?帮帮忙。
此致
敬礼!
比较好的解答方法:
发现现在matlab2011的mmreader支持了很多视频格式了,而且还听快的,我的机器装的是xp,用的是matlab009a,用mmreader出错,或者读取的有问题,换了matlab2011b就好了,希望对后人有帮助。另外aviread一次读取大视频内存出错,一帧一帧读取非常慢,建议用mmreader。