1

我在一个简短的脚本中运行以下简单的行,没有任何问题:

Python 3.5.2;
PIL 1.1.7;
OpenCV 2.4.9.1;
Matplotlib 3.0.1;

...
# for example:
img = plt.imread(i1)
...

但是,如果加载的 .JP2 > ~500 MB,Python3 在尝试加载图像时会抛出以下错误:

“分段错误(核心转储)”

这不应该是 RAM 问题,因为发生错误时仅使用了约 40% 的可用 RAM + 移除 RAM 或将 RAM 添加到计算机时错误保持不变。当使用其他方式加载图像时,错误也保持不变,例如使用 PIL。

有没有办法避免这个错误或解决它?非常感谢!

4

1 回答 1

0

不是真正的解决方案,更多的是一个可能有效或帮助其他人思考类似或进一步发展的想法......

如果您想对每个怪物 JP2 图像进行多次操作或裁剪,可能值得预先付出代价,只需一次转换为 ImageMagick 随后可以更轻松地处理的格式。因此,您的图像是 20048x80000 的 2 字节短裤,因此您可以将其扩展为 16 位 PGM 文件,如下所示:

convert monster.jp2 -depth 16 image.pgm

这大约需要 3 分钟。但是,如果您现在想要从图像高度下方提取部分图像,您现在可以从 PGM 中提取:

convert image.pgm -crop 400x400+0+6000 tile.tif

在 18 秒内,而不是来自怪物 JP2:

convert monster.jp2 -crop 400x400+0+6000 tile.tif

这需要 153 秒。


请注意,PGM 将占用大量磁盘空间....我想您可以尝试使用 TIFF 进行相同的操作,该 TIFF 也可以保存 16 位数据并且可能是 LZW 压缩的。我猜你也可以用它libvips来更快地从 PGM 文件中提取图块。

于 2019-06-20T21:40:10.720 回答