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

标签 python image image-processing python-imaging-library

我尝试使用 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 documentation只字不提 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重复

关于python - 无法在 PIL 中的 16 位 TIF 上应用图像滤镜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062564/

相关文章:

java - 需要一种算法来映射不同尺寸图像中的点的坐标

python - Matplotlib:箭头指向路径中的每个顶点

Python 代码调用创建 OS 线程的 C 库,最终调用 Python 回调

python - 使用 Boto 3 显示 EC2 实例名称

java - 将图像旋转90度说明

ios - 如何从 JSON 查询中获取编码图像并将其编码为 Objective-C 中的 UIImage?

Python 漂亮的按多列排序

html - 包含图像的通讯 - 移动设备上的图像之间有空格

python - 如何拟合4点的椭圆轮廓?

python - 基于颜色python的对象边界框