【问题标题】:What is the best way to convert a video to a List in EmguCV在 EmguCV 中将视频转换为列表的最佳方法是什么
【发布时间】:2016-03-20 02:57:53
【问题描述】:

我想将视频中的每一帧存储在一个通用列表中,以便以后处理。我的列表声明如下: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());

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

【问题讨论】:

    标签: c# list opencv emgucv


    【解决方案1】:

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

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

    我现在正在研究它,但我认为这应该可行。它将创建一个本地副本,而不是依赖于引用。

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2012-02-29
      相关资源
      最近更新 更多