我有一个大小约为2GB的 tif 文件。我想将它转换为一个numpy数组进行进一步处理。 我尝试使用PIL.Image.open(" FileName")打开图像,然后将其添加到numpy数组中。但是我收到了错误:
IOError:无法识别图像文件
文件格式正确,并且还准确指定了位置。你能提供一些有关它可能发生的原因的信息吗?你认为它与文件大小有关吗?
答案 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完成所需的操作。它会快得多。