我必须读取大小为 2200x 2200 的 tif 图像并键入 uint16。我将 PIL 库与 anaconda python 一起使用,如下所示:
from PIL import Image
img = Image.open('test.tif')
img.imshow()
我遇到了以下错误:ValueError: tile cannot extend outside image
这可能是什么原因以及如何解决这个问题?我用的是anaconda python3.6.1版本
最佳答案
这是因为图像编码有错误; TIF 文件中的图 block 实际上确实延伸到了图像之外。您可以通过查看磁贴来确认这一点:
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
.您可以将图像裁剪到预期大小(丢失一些信息),或者扩大图像大小以包含所有图 block 。请参阅此处的示例:
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]
关于python - 在 python 中使用 pil 读取 tif 图像时出现值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907780/