C# 在EmguCV中将视频转换为列表的最佳方式是什么
我想将视频中的每一帧存储在一个通用列表中,以便以后处理。我的列表声明如下:C# 在EmguCV中将视频转换为列表的最佳方式是什么,c#,list,opencv,emgucv,C#,List,Opencv,Emgucv,我想将视频中的每一帧存储在一个通用列表中,以便以后处理。我的列表声明如下:list Stream_to_Images=new list() 为了导入它,我创建了一个计时器,它每33毫秒滴答一次,以获取每一帧。触发的事件应将帧导入列表。因此,我尝试了以下几行: 要么只是一个简单的.Add() 或者每一帧都有一个计数器,每个位置都有自己的地址 Stream_to_Images[StreamPosition] = _capture.QueryFrame(); StreamPosition++; 使用
list Stream_to_Images=new list()代码>
为了导入它,我创建了一个计时器,它每33毫秒滴答一次,以获取每一帧。触发的事件应将帧导入列表。因此,我尝试了以下几行:
要么只是一个简单的.Add()
或者每一帧都有一个计数器,每个位置都有自己的地址
Stream_to_Images[StreamPosition] = _capture.QueryFrame();
StreamPosition++;
使用第一个选项,我的整个列表只包含一帧,不是最后一帧,而是视频最后一帧,第二个选项导致ArgumentOutOfRangeException
。我的想法快用完了,有没有其他方法可以将视频中的每一帧存储在列表中
**更新**
我尝试使用以下方法从列表更改为数组
imageBox1.Image = _capture.QueryFrame();
image_array.Add(_capture.QueryFrame());
但是,如果我尝试交互阵列并显示视频,我只能得到最后一帧的图片。我认为问题可能在于如何将图像添加到列表中。目前,它看起来可能是通过引用添加的,这意味着列表中的所有项目都指向同一个图像。如果您强制Emgu创建框架的副本,它应该可以工作:
imageBox1.Image = _capture.QueryFrame();
image_array.Add(new Image<Rgb, byte>(_capture.QueryFrame().Bitmap));
imageBox1.Image=_capture.QueryFrame();
image_array.Add(新图像(_capture.QueryFrame().Bitmap));
我现在正在进一步研究,但我认为这应该行得通。它将创建本地副本,而不是依赖引用
imageBox1.Image = _capture.QueryFrame();
image_array.Add(new Image<Rgb, byte>(_capture.QueryFrame().Bitmap));