如何使用Python将非常大的图像(tif)文件转换为数组

时间:2016-08-11 22:29:17

标签: python numpy image-processing

我有一个大小约为2GB的 tif 文件。我想将它转换为一个numpy数组进行进一步处理。 我尝试使用PIL.Image.open(" FileName")打开图像,然后将其添加到numpy数组中。但是我收到了错误:

IOError:无法识别图像文件

文件格式正确,并且还准确指定了位置。你能提供一些有关它可能发生的原因的信息吗?你认为它与文件大小有关吗?

1 个答案:

答案 0 :(得分:2)

vips对大文件有很好的支持,而convenient high-level Python binding则可以尝试。

您可以将图像加载到内存中,如下所示:

$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvips
>>> im = pyvips.Image.new_from_file("huge.tif")
>>> im.width
29566
>>> im.height
14321
>>> y = im.write_to_memory()
>>> type(y)
<class '_cffi_backend.buffer'>
>>> len(y)
1270244058

然后以通常的方式从该对象制作一个numpy数组。有chapter in the docs going into more detail on how to pass images back and forth between numpy, PIL and libvips

您计划进行哪种进一步处理?您可以使用vips完成所需的操作。它会快得多。