clear
clc
strAviFile='C:\Users\yangp\Desktop\調試用程序\bd\降溫1.avi';
strDir='C:\Users\yangp\Desktop\調試用程序\bd\Figure\bd-';
bdObj=VideoReader(strAviFile);
%------------------------- 獲取總幀數的錯誤代碼-------------------------
k = 1;
while hasFrame(bdObj)
k = k+1;
end
num_frame=k-1;
%------------------------- 獲取總幀數的正確代碼-------------------------
k = 1;
while hasFrame(bdObj)
temp=readFrame(bdObj);
k = k+1;
end
temp=[];
num_frame=k-1;
%--------------------------------------------------------------------------分析
想通過錯誤代碼來計算出視頻總幀數是不可能的,因爲在循環裏面bdObj.CurrentTime是沒有改變的,所以當hasFrame(bdObj)返回爲真時,這個循環將一直爲真,除非有操作來觸發bdObj.CurrentTime發生改變。
下面一段代碼中,readFrame()每讀一幀,bdObj.CurrentTime就會前進相應的一段時間,這樣hasFrame(bdObj)就不會永遠停留在真或假的狀態。
讀取指定時間區間內的幀並計數
bdObj.CurrentTime = 0.6;
k = 1;
while bdObj.CurrentTime <= 0.9
I=readFrame(bdObj);
k = k+1;
end
I=[];
numFrame=k-1;