Python将32位转换为16位TIFF

3

有没有一种简单的方法将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位。


你需要输出为tiff格式吗?期望的输出是用于查看还是数值计算?如果只想查看,可以尝试a = numpy.asarray(i32); matplotlib.pyplot.imshow(a) - heltonbiker
2个回答

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')

我尝试过这个,但是当我将其转换为“I;16”时,32位图像的直方图从以95/255为中心的~高斯函数变成了16位图像中255的delta函数(即只有白色)。有什么办法可以纠正这个问题吗? - user3822346
这确实有点难以调试,因为我目前没有你的文件,也没有支持f32或i16 tiffs的任何软件:D - Antti Haapala -- Слава Україні

1
Python Imaging Library 不支持16位像素深度。请参见手册中概念部分中的“模式”章节。
同样适用于衍生库Pillow。
尝试使用例如ImageMagick(具有Python 绑定)和-depth选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接