我正在处理 .tif
格式的大型卫星图像文件。首先,我只是尝试打开文件并使用 PIL 查看它们。这是我到目前为止编写的代码:
from PIL import Image
import os.path
script_dir = os.path.dirname(os.path.abspath(__file__))
im = Image.open(os.path.join(script_dir, 'orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif'))
im.show()
很遗憾,我收到错误消息:
IOError Traceback (most recent call last)
/Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/site-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
202 else:
203 filename = fname
----> 204 __builtin__.execfile(filename, *where)
/Users/zlazow/Desktop/Geo Research Files/documents-export-2014-02-13 (3)/showfiles.py in <module>()
3
4 script_dir = os.path.dirname(os.path.abspath(__file__))
----> 5 im = Image.open(os.path.join(script_dir, 'orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif'))
6 im.show()
/Users/zlazow/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/Image.pyc in open(fp, mode)
1978 pass
1979
----> 1980 raise IOError("cannot identify image file")
1981
1982 #
IOError: cannot identify image file
图像文件是否对于 PIL 来说太大了?我可以在预览应用程序中打开一个较小的 (200MB) .tif
文件,但是当我尝试使用 PIL 打开它时,它会创建一个在预览中打开的 BMP 图像,但图像永远不会加载。
所有其他文件 (300MB++) 根本无法使用预览或 PIL 打开。
感谢您的帮助。
最佳答案
Image 构造函数查看其内部格式列表(取决于 PIL 的编译方式)并询问每个格式是否可以解析文件。
作为检测器函数的输入,使用图像文件的前几个字节。通过查看 TIFF 图像阅读器内部,它会查找以下魔术字节之一:
["MM\000\052", "II\052\000", "II\xBC\000"]
如错误消息所示,检测器在读取文件的前几个字节时失败,远远早于它读取图像的尺寸。更有可能是以下原因之一:
- 文件已损坏
- 文件不是 TIFF 图像
- 该文件是 PIL 无法理解的一些奇特的/新的 TIFF 子格式
至于解决方案,我建议:
使用
file
命令尝试识别文件格式,例如文件 orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif
应该打印类似的东西
Untitled.tiff:TIFF 图像数据,大端
尝试打开文件,例如Photoshop 并查看它是否可以理解该文件。
- 手动检查文件头,看看文件是否以上面的魔术字节开头。
编辑:既然您确定了格式 (BigTIFF),您有两个选择:转换它或找到一个 Python 库来加载它。 http://bigtiff.org具有内置 BigTIFF 的非官方 libtiff
版本。您可以尝试编译 pylibtiff针对此 libtiff 版本,或使用 ImageMagick(编译时支持 BigTIFF)首先将图像转换为常规 TIFF 文件。
关于Python 图像库 - 无法打开大型 .tif 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866146/