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

如何使用Python将超大图像(tif)文件转换为数组,python,numpy,image-processing,Python,Numpy,Image Processing,我有一个~2GB大小的tif文件。我想将其转换为numpy数组以进行进一步处理。 我尝试使用PIL.image.open(“文件名”)打开图像,然后将其添加到numpy数组中。但我得到了一个错误: IOError:无法识别图像文件 文件格式正确,并且准确指定了位置。你能提供一些关于为什么会发生这种情况的信息吗?你认为这与文件大小有关吗 您可以试试Scipy: from scipy import misc f = misc.face() misc.imsave('face.png', f) # u

我有一个~2GB大小的tif文件。我想将其转换为numpy数组以进行进一步处理。 我尝试使用PIL.image.open(“文件名”)打开图像,然后将其添加到numpy数组中。但我得到了一个错误:

IOError:无法识别图像文件

文件格式正确,并且准确指定了位置。你能提供一些关于为什么会发生这种情况的信息吗?你认为这与文件大小有关吗

您可以试试Scipy:

from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)

import matplotlib.pyplot as plt
plt.imshow(f)
plt.show()
--来源:

对大文件有很好的支持,而且,您可以尝试一下

您可以按如下方式将图像加载到内存:

$ 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
$python3
Python 3.6.7(默认,2018年10月22日,11:32:17)
linux上的[GCC 8.2.0]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>进口pyvips
>>>im=pyvips.Image.new_from_文件(“maging.tif”)
>>>im宽度
29566
>>>身高
14321
>>>y=im.write_to_memory()
>>>类型(y)
>>>蓝(y)
1270244058
然后以通常的方式从该对象生成一个numpy数组。有一个


您计划进行什么样的进一步处理?您可能只需要使用VIP即可完成所需的操作。那会快得多

你能提供实际的代码,也许还有一个指向源文件的指针吗?除非我们能够重现错误,否则很难诊断。感谢您提供的信息:)这很有帮助!