在EmguCV中将视频转换为List的最佳方法是什么?

时间:2015-12-14 15:05:05

标签: c# list opencv emgucv

我想将我的视频中的每一帧存储在一个通用列表中,以便稍后处理。我将列表声明为:List<Image<Bgr, Byte>> Stream_to_Images = new List<Image<Bgr, Byte>>();

要导入它,我创建了一个计时器,每隔33毫秒就会打勾,以获得每一帧。触发的事件应将帧导入列表。因此,我尝试了以下几行:

要么只是一个简单的.Add()

Stream_to_Images.Add(_capture.QueryFrame());

或每个框架的计数器,并对每个位置本身进行处理。

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

使用第一个,我的整个列表只包含一个帧,而不是最后一个,而是视频最后一个,第二个选项产生ArgumentOutOfRangeException。我的想法已经不多了,有没有其他方法可以将我的视频中的每一帧存储在列表中?

** 更新 **

我尝试使用此

从列表更改为数组
imageBox1.Image = _capture.QueryFrame();
image_array.Add(_capture.QueryFrame());

但是,如果我尝试对数组进行交互并显示视频,我只会得到最后一帧的图片。

1 个答案:

答案 0 :(得分:0)

我认为问题可能在于您如何将图像添加到列表中。目前,它看起来可能是通过引用添加,这意味着列表中的所有项目都指向同一图像。如果你强制Emgu创建框架的副本,它应该工作:

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

我现在正在寻找它,但我认为这应该有效。它将创建一个本地副本,而不是依赖于引用。