Python Can';t在PIL中的16位TIF上应用图像过滤器

Python Can';t在PIL中的16位TIF上应用图像过滤器,python,image,image-processing,python-imaging-library,Python,Image,Image Processing,Python Imaging Library,我尝试使用python的方法应用图像过滤器。代码是直截了当的: im = Image.open(fnImage) im = im.filter(ImageFilter.BLUR) 此代码在PNG、JPG和8位TIF上正常工作。但是,当我尝试在16位TIF上应用此代码时,会出现以下错误 ValueError: image has wrong mode 请注意,PIL能够加载、调整大小和保存16位TIF而不会出现问题,因此我假设此问题与过滤器相关。但是,对于16位支持没有任何说明 有什么办法可以

我尝试使用python的方法应用图像过滤器。代码是直截了当的:

im = Image.open(fnImage)
im = im.filter(ImageFilter.BLUR)
此代码在PNG、JPG和8位TIF上正常工作。但是,当我尝试在16位TIF上应用此代码时,会出现以下错误

ValueError: image has wrong mode
请注意,PIL能够加载、调整大小和保存16位TIF而不会出现问题,因此我假设此问题与过滤器相关。但是,对于16位支持没有任何说明


有什么办法可以解决这个问题吗?

若要继续,请尝试使用,查找程序的PythonMagick挂钩。在命令提示下,可以使用
convert.exe image-16.tiff-blur 2x2 output.tiff
。由于源代码需要编译,因此未能在我的windows操作系统中安装PythonMagick

您的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)

备注:可能从

复制没有多大帮助,但我敢打赌模糊过滤器不支持它。甚至Photoshop也不支持16位模式下的所有操作(遗憾的是)。@Skurmedel ImageFilter文档没有提到16位支持,这让我认为这是一个可以解决的问题。如果您在尝试从
ImageChops
执行逻辑运算符时遇到这个问题,那么您应该使用
im.convert(“1”)
。如果不明显:请注意,
L
I
模式都是8位模式(参考:),因此此处显示的代码会将图像的深度从16位减少到8位。