无法在PIL中的16位TIF上应用图像滤波器

Bor*_*lik 4 python image image-processing python-imaging-library

我尝试使用python的PIL应用图像过滤器.代码很简单:

im = Image.open(fnImage)
im = im.filter(ImageFilter.BLUR)
Run Code Online (Sandbox Code Playgroud)

此代码在PNG,JPG和8位TIF上按预期工作.但是,当我尝试在16位TIF上应用此代码时,我收到以下错误

ValueError: image has wrong mode
Run Code Online (Sandbox Code Playgroud)

请注意,PIL能够在没有抱怨的情况下加载,调整大小并保存16位TIF,因此我假设此问题与过滤器相关.但是,ImageFilter文档没有提到16位支持

有什么办法可以解决吗?

Hug*_*lle 15

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

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

im.convert('L')
Run Code Online (Sandbox Code Playgroud)

如果失败,请尝试:

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

备注:Python和16 Bit Tiff可能重复

  • 如果不明显:注意`L`和`I`模式都是8位模式(参考:http://pillow.readthedocs.io/en/latest/handbook/concepts.html#modes),所以此处显示的代码会将图像的深度从16位降低到8位. (2认同)