【问题标题】:Best way to store motion changes to reduce memory存储运动变化以减少内存的最佳方法
【发布时间】:2013-10-20 07:28:32
【问题描述】:

我在一个恒定的“视频流”中比较 jpeg 和 jpeg。我正在使用 EMGU/OpenCV 在字节级别比较每个像素。每个图像 (RGB) 有 3 个通道。我听说通常的做法是只存储在帧之间发生变化的像素作为节省内存空间的一种方式。但是,例如,如果我说每个像素都发生了变化(请注意,我使用了一个夸张的例子来说明我的观点,我通常会丢弃如此大的变化),那么保存的结果字节是原始 jpeg 的 3 倍。

如何有效地存储此类运动变化?

谢谢

【问题讨论】:

  • 可能更适合programmers.stackexchange.com
  • @TobyAllen 可能,但我不想支付一个月的订阅费用。我以为这也是一个程序员论坛?
  • 为什么您必须付费订阅才能使用programmers.stackexchange.com?它是 stackexchange 网络的一部分(stackoverflow 是)。它都是免费的。您可能会想到expertexchange,但事实并非如此。 Programmers.stackexchange.com 是一个讨论这类问题而不是代码的网站。请点击此链接programmers.stackexchange.com
  • @TobyAllen 哈哈 - 你是对的。我让他们感到困惑。抱歉 +1

标签: emgucv


【解决方案1】:

在拍摄连续图像时,相机可能也会移动或不移动。如果相机是固定的,则只有视图上的项目会移动,并且每次图像的某些部分都会发生变化。如果相机也移动,即使物体静止不动,图像也会发生显着变化。有一些算法可以丢弃相机运动的影响。因此,主要思想是与相机的采样频率(例如每秒 25 帧)相比,大多数物体几乎静止不动。

由于帧之间的大部分图像是不变的,因此使用图像的差异变得可行。它提供了一些压缩比。但是经过一段时间后,新接收到的图像与参考图像显示出很大的差异,因此获得新的图像参考变得更好。这被称为“参考框架”。

事实上,现代视频压缩算法使用先进的技术来检测对象并跟踪它们,从而获得更好的压缩比。

  • Wikipedia - 不同的压缩技术
  • Check This - OpenCV 应该处理以不同视频格式存储的连续图像。

【讨论】:

  • 感谢您的回复。我确实使用帧之间的 absdiff。我不能使用压缩技术,因为 jpeg 在帧之间没有相互压缩。目前,我列举了仅存储更改的图像。我想获取已更改的字节并存储 x,y 坐标。然后我可以在需要时使用它来重新创建图像。我应该如何有效地存储这些二进制数据?
  • 看看这个类,你已经给 VideoWriter 一个图像,然后是另一个图像。它自己处理编码和写入。并且图像也可能是 JPEG 格式,使用 imLoadImage 或从网络摄像头读取。 docs.opencv.org/modules/highgui/doc/…
  • 如果图像不大,不要将 x、y 坐标存储在 int 变量中,而是使用 unsigned char / unsigned short 或使用以位为单位指定变量的结构。您还可以分离 rgb 通道并分别对它们中的每一个应用此操作。为差异设置一些阈值,以便可能忽略不重要的更改,例如 255 中的 5 之间的差异。
  • 正如我所说,即使视图上的所有对象都是固定的,如果相机在移动,所有像素都会发生变化。找到一个对其进行编码的库可能是一个更好的选择。 ffmpeg.org 您可以使用位字段stackoverflow.com/questions/4129961/…。更好的是只需减去两张图像并获得一张有很多零的图像。对生成的图像应用压缩算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2014-05-20
  • 2011-10-03
  • 1970-01-01
  • 2010-11-30
  • 2014-01-02
  • 2018-11-04
相关资源
最近更新 更多