Python将32位转换为16位tiff

3 投票
2 回答
6827 浏览
提问于 2025-04-18 12:43

有没有简单的方法把一个32位的.tif文件转换成16位的.tif文件?在IDL中,write_tiff可以用/short来代替/float。那Python能做到吗?我试过这样做:

i32 = Image.open('image.tif')
<Image.Image image mode=F size=2016x2016 at 0x102A3E998>
i32.convert('L').save('newimage.tif')

ImageJ(一个查看器)打开这个tif文件后说,这张图片是8位的,而不是16位的。

2 个回答

1

Python图像库不支持16位的像素深度。你可以在手册的概念部分查看“模式”相关的信息。

派生库Pillow也是一样的情况,具体可以参考这个链接

你可以试试ImageMagick,它有Python的接口,并且可以使用-depth这个选项。

3

来自 PIL 文档'L' 模式是用来处理8位灰度图像的,而你原来的图像是32位浮点数(模式 'F'),并不是整数!如果你想得到16位整数图像,可以尝试使用 'I;16' 作为模式;在我的Pillow 2.0.0(Ubuntu 14.04)中至少是支持的:

f32 = Image.open('image.tif')
f32.convert('I;16').save('newimage.tif')

撰写回答