[英]How to read a particular video frame by its frame index in Matlab?
我正在研究一種算法,該算法通過索引獲取單個視頻幀,對其進行處理並獲取新索引的下一個視頻幀。
我正在使用Matlab VideoReader函數讀取視頻文件。 要讀取下一幀,它會提供readFrame函數。
readFrame函數可以占用幀的時間並在那時讀取該特定幀。 如何使用它來讀取給定索引處的特定幀?
我在Linux中使用Matlab 2016b。 我有mmread函數,它采用視頻文件名和幀索引來讀取幀。 但是這個文件依賴於Windows 64位編譯的Matlab函數文件,所以我不能使用它。
這是我使用它的方式:
for i = startIdx:endIdx
frame = mmread(filename, i);
...
processing the frame
...
end
這是我從Windows獲得的mmread函數的鏈接 。
您可以使用讀取功能。 但是文檔建議不推薦(我不知道為什么)。
v = VideoReader(filename);
for i = startIdx:endIdx
frame = read(v,i);
...
processing the frame
...
end
除了@ ga97dil的答案。 正如他所說,Matlab建議不要使用read函數,而是建議使用VideoReader.readFrame功能來讀取幀。
因為,這個函數不會將幀索引作為參數,而是一個讀取幀的特定時間,我想如果我可以將特定幀索引轉換為視頻中的時間。 谷歌搜索后,我發現這個線程作為一個解決方案。
這是我定義新的mmread.m函數的方法
function [ frame ] = mmread_1(filename, frameIdx)
v = VideoReader(filename); % read the video file
v.CurrentTime = (frameIdx - 1) / v.FrameRate; % calculate the time for the given frame index
frame = readFrame(v); % read the frame
end
由於Matlab建議不要使用讀取功能(可能會在將來的版本中刪除),因為可移植性,我不喜歡使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.