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