c++ - 将大量图像数据(10^9 像素)加载到内存中

标签 c++ image video video-processing

我正在将视频帧提取到 Surface 数组以重新排列成新视频,并随时间交换 x 维度。以下是出现的不同类型效果的一些示例:http://www.youtube.com/view_play_list?p=B2540182DE868E85

当我尝试将 1280 帧 1280x720 视频(1,179,648,000 像素)存储到 Surface[] 时,应用程序总是因 std::bad_alloc 而崩溃。它不会在 1280 帧 1080x720 视频(995,328,000 像素)中崩溃。

我做了一个简单的测试,让它可以在我的电脑(4GB RAM)上运行,但不能在 friend 的更小的笔记本电脑上运行:

maxWidth = 1920;
while ((inW * inH * maxWidth) >= 1000000000)
  maxWidth -= 20;

两个问题:

  1. 有没有比 Surface 阵列更好的方法来快速访问 10^9 像素?
  2. 这个内存限制是什么?在为输出设置 maxWidth 时如何测试和避免它?

非常感谢 C++ 菜鸟。我把来源放在Github: Redimensionator .它使用 Cinder。

最佳答案

嗯,这取决于你的硬件/操作系统/软件/编译器。

  • 您运行的是 32 位还是 64 位操作系统?
  • 您将应用编译为 32 位还是 64 位?
  • 您是一次分配所有资源还是分块分配(分别说每一帧)?
  • 您是否真的需要同时将所有图像存储在内存中,或者您可以对工作进行分区吗?

在每个问题的后半部分回答"is"可以让您更轻松地使用大型数组。

关于c++ - 将大量图像数据(10^9 像素)加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232026/

相关文章:

c++ - 如何循环异构类的实例以调用具有相同名称和参数的方法?

c++ - 取消/清除 boost::tuple of pointers

image - 安装了hadoop的Ubuntu img文件?

ios - iOS-我们可以在运行时将矢量pdf转换为png吗?

android - FFMPEG : Adding font to Video gives error

c++ - 在 C++ 中读取大字符串——有安全快速的方法吗?

C++ 递归模板分辨率 : flattening vectors of vectors elegantly

c++ - 在鼠标悬停时更改图片框,并在鼠标离开时重置

javascript - 即使模态框关闭,视频也会继续播放

algorithm - 什么容器最容易将 JPEGS 和 MP3 组合为视频?