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

4 投票
2 回答
6789 浏览
提问于 2025-04-17 05:56

我在用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位的支持。

有没有办法解决这个问题呢?

2 个回答

0

要继续前进,可以试试使用 ImageMagick,并寻找与这个程序相关的 PythonMagick 接口。在命令提示符下,你可以使用 convert.exe image-16.tiff -blur 2x2 output.tiff 这个命令来处理图片。不过我在我的 Windows 操作系统上没能成功安装 PythonMagick,因为它的源代码需要编译。

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和16位TIFF的问题重复。

撰写回答