Matlab读取视频并处理成帧保存

Matlab读取视频并处理成帧保存

本文介绍主要介绍VideoReader读取视频,并用imwrite将视频帧保存。

VideoReader介绍

obj = VideoReader(\'D://Media//111.mp4\');%输入视频位置

难点在于详解obj结构体的含义,如下(见doc VideoReader):

Name - -视频文件名

Path – 视频文件路径

Duration – 视频的总时长(秒)

FrameRate - -视频帧速(帧/秒)

NumberOfFrames – 视频的总帧数

Height – 视频帧的高度

Width – 视频帧的宽度

BitsPerPixel – 视频帧每个像素的数据长度(比特)

VideoFormat – 视频的类型, 如 ‘RGB24’.

Tag – 视频对象的标识符,默认为空字符串”

Type – 视频对象的类名,默认为’VideoReader’.

UserData – Generic field for data of any class that you want to add to the object. Default: []

obj_numberofframe = obj.NumberOfFrame;%读取总的帧数
obj_height = obj.Height;%读取视频帧高度
%%%以此类推

read - 读取视频帧

1 frame = read(obj),获取该视频对象的所有帧
2 frame = read(obj,index),获取该视频对象的制定帧
3 frame = read(obj, 1);         % first frame only 获取第一帧
4 frame = read(obj, [1 10]);    % first 10 frames 获取前10帧
5 frame = read(obj, Inf);       % last frame only 获取最后一帧
6 frame = read(obj, [50 Inf]);  % frame 50 thru end 获取第50帧之后

imwrite-写入文件

1  imwrite(frame,strcat(\'D:\image\cankao1\1.jpg\'),\'jpg\');% 保存帧
2 %%%frame为待保存的某一帧 
3 %%%strcat(\'D:\image\cankao1\1.jpg\')为保存目录
4 %%%\'jpg\'为保存格式

整体代码

1 obj = VideoReader(\'D://Media//111.mp4\');%输入视频位置
2 numFrames = obj.NumberOfFrames;% 帧的总数
3  for k = 1 : 15% 读取前15帧
4      frame = read(obj,k);%读取第几帧
5     % imshow(frame);%显示帧
6       imwrite(frame,strcat(\'D:\image\cankao1\\',num2str(k),\'.jpg\'),\'jpg\');% 保存帧
7  end

再如例子:

1 file_path =  \'F:/__identity/activity/赛事/2017建模交大赛题/B题附件/附件1/\';
2 obj1 = VideoReader(strcat(file_path,\'1\',\'.avi\'));   %读入视频1
3 obj1_numFrames = obj1.NumberOfFrames;   % 视频1帧的总数
4 for k = 1:obj1_numFrames
5     frame = read(obj1,k);   %读取第k帧
6     % imshow(frame);    %显示第k帧
7     store_path = strcat(file_path,\'pict1/\',num2str(k),\'.jpg\');    % 第k帧图片的地址
8     imwrite(frame,store_path);  % 保存帧
9 end