我必须阅读大小 2200x 2200 的tif图像并输入uint16。我使用带有anaconda python的PIL库如下:
from PIL import Image
img = Image.open('test.tif')
img.imshow()
我收到了以下错误:ValueError: tile cannot extend outside image
这可能是什么原因以及如何解决这个问题?我使用的是anaconda python3.6.1版本
答案 0 :(得分:0)
这是因为图像编码有错误; TIF文件中的切片实际上扩展到图像外部。您可以通过查看磁贴来确认:
img.tile
将输出如下内容:
[('tiff_lzw', (0, 0, 240, 240), 16, 'RGB'),
('tiff_lzw', (240, 0, 480, 240), 94905, 'RGB'),
...
('tiff_lzw', (720, 960, 960, 1200), 1711985, 'RGB'),
('tiff_lzw', (960, 960, 1200, 1200), 1730566, 'RGB')]
如上图所示,图片尺寸为1000x1000
像素,但瓷砖显然会延伸到1200x1200
。您可以将图像裁剪为预期大小(丢失一些信息),或者扩展图像大小以包括所有图块。请参见此处的示例:
https://github.com/python-pillow/Pillow/issues/3044
,im.size = (1000, 1000)
或im.tile = [e for e in im.tile if e[1][2] < 1200 and e[1][3] < 1200]
答案 1 :(得分:-1)
问题是PIL希望在文件名末尾看到“.tiff”。你有“.tif”。解决方案是将您的文件重命名为“test.tiff”。