matlab读取/播放视频的函数

502 阅读2分钟

环境配置

  • Ubuntu 18.04.5 LTS
  • matlab 2014b

困难1:matlab用VideoReader函数读取avi视频报错VideoReader Error: Unable to initialize the video properties

  • 原因:google得缺少gstreamer
  • 解决方法:sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
  • 很多博客上说的安装方法不能安装成功,推荐去官网。

gstreamer.freedesktop.org/documentati…

  • 参考资料:

[Matlab - VideoReader Error: Unable to initialize the video properties​blog.csdn.net/sxcsxcsxcsxc/article/details/104961467![](https://p3-

困难2:认识VideoReader函数

  • 语句格式:obj = VideoReader('video_name.avi')
  • 输入是一个字符串,avi或者mp4格式的,其它格式的我还没试过
  • 输出是一个object,具体参考官方文档

结果

如何播放视频:

从官方文档可知,read函数可以读取obj这个VideoReader对象的帧,因此

obj = VideoReader('/home/elaine/dataset/video/highway.avi');
move = read(obj);%获得一个uint8的4-d array,
implay(move);%演示视频

大体而言,一个彩色视频的move的大小应该是 [公式] ,[hight,width,num_band,num_frame] 分别是高度、宽度、通道数,帧数。

1. 可以用mmreader和 read这两个函数读取视频帧
readerobj = mmreader('xylophone.mpg');
vidFrames = read(readerobj);
具体参数含义帮助文档里面有。示例:

fileName = 'ntia_wfall-qcif_original.avi'; % .avi必须是无损压缩的. 

obj = mmreader(fileName);

vidFrames = read(obj);% 读取所有的帧数据

numFrames = obj.numberOfFrames;% 帧的总数 for k = 1 : numFrames% 读取数据     mov(k).cdata = vidFrames(:,:,:,k);% mov(k)是一个结构体,mov(k).cdata实际上就是一个有RGB的帧

     mov(k).colormap = [];

end

movie(mov);% 在matlab中播放视频

 

2. 从AVI视频中提取每一帧,使用 aviinfo,aviread

str='D:\Program Files\MATLAB71\work\1.avi';

info=aviinfo(str);

fum=info.NumFrames;

for i=1:fum

    mov=aviread(str,i);

    I=mov.cdata;

    J=rgb2gray(I);

    imwrite(J,strcat('F:\shiyan\work\',int2str(i),'.bmp'),'bmp');

end

 

3. Matlab下读取视频文件并进行基于邻帧差法的视频目标运动检测(原文

videoObj = mmreader('highwayII_raw.avi');%读视频文件
nframes = get(videoObj, 'NumberOfFrames');%获取视频文件帧个数

for k = 1 : nframes
currentFrame = read(videoObj, k);%读取第i帧
subplot(1,2,1),imshow(currentFrame);

grayFrame = rgb2gray(currentFrame);%灰度化
if(k==1)
grayFrame_1 = grayFrame;
end
difgrayFrame= grayFrame - grayFrame_1;%邻帧差
grayFrame_1 = grayFrame;

subplot(1,2,2),imshow(difgrayFrame);
end

 

4. 播放视频可使用 movie(mov)(使用示例见1中),implay('*.avi')