前言
視頻處理分析的過程中,需要用到將視頻一幀幀地讀取、寫入,本文就涉及此問題。
系統環境
1.系統:win7_64
2.matlab版本:matlab2015a
測試代碼
代碼一(讀視頻):
%To read video frames. clc clear close all fileName = 'E:\fatigue_detection\dataset\segVideosP1\1_5.avi'; obj = VideoReader(fileName); numFrames = obj.NumberOfFrames; for i = 1 : numFrames frame = read(obj,i); imshow(frame); imwrite(frame,strcat(num2str(i),'.jpg'),'jpg'); end
代碼二(讀視頻):
fileName = 'E:\fatigue_detection\dataset\segVideosP1\1_5.avi'; xyloObj = VideoReader(fileName); vidWidth = xyloObj.Width; vidHeight = xyloObj.Height; % mov = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]); while hasFrame(xyloObj) frame = readFrame(xyloObj); imshow(frame); end
代碼三(寫視頻):
寫視頻步驟:
創建視頻文件VideoWriter - > 打開視頻文件open - > 獲取視頻幀並寫入視頻文件writeVideo -> 關閉視頻文件close.
fileName = 'E:\fatigue_detection\dataset\segVideosP1\1_5.avi'; %method2 xyloObj = VideoReader(fileName); vidWidth = xyloObj.Width; vidHeight = xyloObj.Height; fps = xyloObj.FrameRate; out = VideoWriter('out.avi'); out.FrameRate = fps; open(out); while hasFrame(xyloObj) frame = readFrame(xyloObj); writeVideo(out, frame); end close(out);
代碼可參考matlab的help文檔.
注意:
1.不同版本之間可能會存在一些代碼問題,可參考help文檔進行修正.
2.寫入視頻文件之前要先打開文件,寫入完畢之后要關閉文件.
完