我正在研究.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。
感谢您的帮助。
答案 0 :(得分:2)
Image构造函数查看其内部格式列表(取决于PIL的编译方式),并询问每个格式是否可以解析文件。
作为检测器功能的输入,使用图像文件的前几个字节。通过查看TIFF图像阅读器,它会查找以下魔术字节之一:
["MM\000\052", "II\052\000", "II\xBC\000"]
如错误消息所示,在读取文件的前几个字节之前,检测器会失败,然后才能读取图像的尺寸。出现以下原因之一的可能性更大:
至于解决方案,我建议:
使用file
命令尝试识别文件格式,例如
file orthoQB02_11JUL040015472-M1BS-101001000DB70900_u16ns3413.tif
应打印类似
的内容 Untitled.tiff: TIFF image data, big-endian
尝试打开文件,例如Photoshop并查看它是否能理解文件。
编辑:由于您确定了格式(BigTIFF),因此您有两个选择:转换它或找到一个Python库来加载它。 http://bigtiff.org内置了BigTIFF的非官方libtiff
版本。您可以尝试针对此libtiff版本编译pylibtiff,或使用ImageMagick(使用BigTIFF支持编译)将图像转换为常规TIFF文件第一