2015-12-14 82 views
3

我想將我的視頻中的每一幀存儲在通用列表中,以便稍後處理。我的名單聲明如下:List<Image<Bgr, Byte>> Stream_to_Images = new List<Image<Bgr, Byte>>();什麼是將視頻轉換爲EmguCV中的列表的最佳方式

要導入它,我創建了一個計時器,每33毫秒計數一次,以獲得每一幀。觸發的事件應該將幀導入列表。因此,我曾嘗試以下行:

要麼只是一個簡單的。新增()

Stream_to_Images.Add(_capture.QueryFrame()); 

或每幀的計數器,並且adressing每個位置本身。

Stream_to_Images[StreamPosition] = _capture.QueryFrame(); 
StreamPosition++; 

使用第一,我的整個列表只包含一幀,而不是最後一個,但一個從視頻的最後,第二個選項導致一個ArgumentOutOfRangeException。我缺乏想法,有沒有其他方法可以將我的視頻中的每一幀存儲在列表中?

** UPDATE **

我試圖從列表中,更改爲陣,通過使用這種

imageBox1.Image = _capture.QueryFrame(); 
image_array.Add(_capture.QueryFrame()); 

但仍,如果我嘗試interate陣列和顯示視頻,我只能看到最後一幀的圖片。

回答

0

我認爲這個問題可能與您如何將圖像添加到列表中。目前,它看起來可能是通過引用添加的,這意味着列表中的所有項目指向相同的圖像。如果強制Emgu創建幀的副本,它應該工作:

imageBox1.Image = _capture.QueryFrame(); 
image_array.Add(new Image<Rgb, byte>(_capture.QueryFrame().Bitmap)); 

我期待更多的到現在,但我認爲這應該工作。它會創建一個本地副本,而不是依賴引用。

相關問題