【问题标题】:LibVIPS crashing when processing 3.9gb tiff image处理 3.9gb tiff 图像时 LibVIPS 崩溃
【发布时间】:2015-10-26 23:53:40
【问题描述】:

我目前正在做一个项目,我的图像大小约为 3.9gb。我想通过执行以下命令为这个图像(这是 LibVIPS 可以生成的东西)创建一个谷歌地图之类的视图:

vips-dev-8.1.1\bin\vips.exe dzsave testje-131072.tiff mydz

但是,执行此操作时会显示一些警告,然后程序崩溃:

vips warning: tiff2vips: no resolution information for TIFF image "testje-131072.tiff" -- defaulting to 1 pixel per mm
vips warning: tiff2vips: no resolution information for TIFF image "testje-131072.tiff" -- defaulting to 1 pixel per mm
vips warning: vips_tracked: out of memory --- size == 48MB

有人知道我可以做些什么来使用 Vips 处理这种尺寸的图像吗? (或任何其他库?)。

我自己做了一些调查,似乎我们需要 BigTiff,我查看了 VIPS 源代码并看到 BigTiff 一词被多次使用,所以我认为应该支持它?

Some information about the image:
Width: 131072
Height: 131072
Chunks: 32x32 (4096x4096 each)
Compression: LZW

在 VLIV(超大图像查看器)等工具中打开图像时,图像可以正常打开。

【问题讨论】:

  • 你有多少内存?这是什么窗户? x64 ? vips.exe 是 32 位的吗?一些原因:从 Win Vista 和以后的进程调度程序发生了很大变化,现在在更小的时间限制内没有响应的旧程序将被冻结。您可以尝试在 XP SP3 兼容模式下运行程序,同时关闭有时会有所帮助的高级 gfx 内容(防止程序停止工作消息)。如果您有 32 位应用程序,那么您将被限制为 4 或 2 GB 内存(取决于应用程序使用的内存管理器),有时分配 1GB 以上的块可能会出现问题。
  • 在这种情况下,请尝试找到 64 位版本的应用程序(如果您有 64 位操作系统)或将图像切割成更小的部分。因为这不是一个编程问题,所以我投票结束
  • 感谢您的回答:)。该程序似乎只有 32 位版本(虽然我有 32gb 的内存),我想“不关闭”这个话题的原因是因为它没有解决。我在这里发布了我的问题,因为 LibVIPS 是一个开源软件包,似乎在读取我的图像时出现问题。我真的看不出在我的项目中包含库或直接调用 VIPS.exe 之间有什么区别。 (为了使我的问题尽可能简单和集中,我选择使用他们的编译程序版本,而不是在我自己的项目中使用他们的库)。
  • 1.在 x64 窗口上运行的 32 位程序在 WoW64 模拟器中运行,并且最多只能访问 4 GB 内存(安装 8 GB 或 128 GB 无关紧要)。一些内存管理器(取决于你的程序是用什么编译的)只能使用 2GB 的地址空间。我还发现,有时在 WoW64 下,如果你想分配大小超过 1 GB 的单个块,即使你有那么多内存(从 4GB 开始),有时也会崩溃。这个网站是针对与编程相关的问题。我认为你应该在不同的 Stack Exchange 网站上发布这个,不确定哪个可能是超级用户
  • 但是如果 LibVIPS 是开源的,那么您可以尝试将其构建为非常适合该站点的 64 位应用程序...只需下载包源代码存储库(乌龟对此很有用)然后安装一些与此软件包兼容的 64 位编译器(我猜是一些 MSVC++ 或 GCC)并编译 64 位二进制文​​件......恐怕你需要一些额外的东西,比如框架 SDK;因为现在程序员无法做独立的东西,而是你需要包括无数糟糕的库来制作 helo 世界的例子......并且需要安装大量的垃圾来运行 exe......

标签: image-processing tiff libtiff vips


【解决方案1】:

我是 libvips 的维护者。 vips.exe 二进制文件包含 bigtiff 支持,应该能够轻松处理这种大小的图像。在 Windows 上构建自己具有挑战性,可能需要一周的工作,除非您非常专家,否则我不会尝试自己构建。

我认为问题可能出在您的输入图像上。我认为它使用了非常大的瓷砖(4096 x 4096)。 libvips 必须在内存中保留两行完整的图块,即 4096 x 131072 x 3 x 2 像素,即 3GB。

我会重新制作您的源图像。使用较小的图块,可能是 512 x 512,并确保您正在编写一个 bigtiff 图像。如果您仍然有问题,请在 libvips 跟踪器上打开一个问题,在那里调试东西更容易。

https://github.com/jcupitt/libvips/issues

编辑:现在有一个官方的 64 位 Windows 版本的 libvips 和 vips.exe,它可能会有所帮助:

http://www.vips.ecs.soton.ac.uk/supported/current/win32/vips-dev-w64-8.1.1-2.zip

【讨论】:

  • 啊,这解释了很多。我确实已经听说在 Windows 上编译 libvips 是一个相当大的挑战。我将尝试减小图块大小并重新创建图像,看看会发生什么。也许有点离题,但 libvips 使用什么 tiff 版本? remotesensing.org/libtiff 的 4.0.6 是遵循 Tiff 6.0 规范还是完全不同的东西?
  • 你好,windows vips 是由这个构建的:github.com/jcupitt/build-win32 你可以在这里看到 tiff 库:github.com/jcupitt/build-win32/blob/master/8.1/… 所以它是 libtiff 4.0.6。
猜你喜欢
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2014-03-18
相关资源
最近更新 更多