簡體   English   中英

如何在Matlab中通過幀索引讀取特定的視頻幀?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM