我想将我的视频中的每一帧存储在一个通用列表中,以便稍后处理。我将列表声明为: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());
但是,如果我尝试对数组进行交互并显示视频,我只会得到最后一帧的图片。
答案 0 :(得分:0)
我认为问题可能在于您如何将图像添加到列表中。目前,它看起来可能是通过引用添加,这意味着列表中的所有项目都指向同一图像。如果你强制Emgu创建框架的副本,它应该工作:
imageBox1.Image = _capture.QueryFrame();
image_array.Add(new Image<Rgb, byte>(_capture.QueryFrame().Bitmap));
我现在正在寻找它,但我认为这应该有效。它将创建一个本地副本,而不是依赖于引用。