MATLAB中hasFrame和readFrame

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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章