环境配置
- 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 propertiesblog.csdn.net/sxcsxcsxcsxc/article/details/104961467
- 输入是一个字符串,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')