在PIL中无法在16位TIF图像上应用图像滤镜

4

我试图使用Python的PIL来应用图像滤镜。 代码非常简单:

im = Image.open(fnImage)
im = im.filter(ImageFilter.BLUR)

这段代码在PNG、JPG和8位TIF中运行正常。然而,当我尝试将此代码应用于16位TIF时,出现以下错误。
ValueError: image has wrong mode

请注意,PIL能够加载、调整大小和保存16位TIF文件而不会出现任何问题,因此我认为这个问题与滤镜有关。然而,ImageFilter文档没有提到对16位的支持。
有没有什么办法解决它?

不是很有帮助,但我敢打赌模糊滤镜只是不支持它。甚至 Photoshop 在 16 位模式下也不支持每个操作(可悲的是)。 - Skurmedel
@Skurmedel ImageFilter文档中没有提到16位支持的问题,这让我认为这是一个可以解决的问题。 - Boris Gorelik
2个回答

16

你的TIFF图像模式很可能是"I;16"。 在当前版本的ImageFilter中,卷积核只能应用于"L"和"RGB"图像(请参见ImageFilter.py源代码)。

尝试先转换为另一种模式:

im.convert('L')

如果失败了,请尝试:

im.mode = 'I'
im = im.point(lambda i:i*(1./256)).convert('L').filter(ImageFilter.BLUR)

备注:可能是从Python and 16 Bit Tiff重复的问题。


1
如果您在尝试使用ImageChops进行逻辑运算时遇到此问题,则应使用im.convert("1") - Nick Larsen
5
请注意:LI 模式都是8位模式(参考:http://pillow.readthedocs.io/en/latest/handbook/concepts.html#modes),因此这里显示的代码将把您的图像深度从16位降低到8位。 - Mark Amery

0
要继续前进,请尝试使用 ImageMagick,寻找与 PythonMagick 程序的钩子。在命令提示符中,您可以使用 convert.exe image-16.tiff -blur 2x2 output.tiff。我没有能够在我的 Windows 操作系统上安装 PythonMagick,因为源代码需要编译。

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