2011-11-09 17 views
2

我嘗試使用python的PIL應用圖像過濾器。代碼很簡單:無法在PIL中的16位TIF上應用圖像過濾器

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

此代碼按預期在PNG,JPG和8位TIF上工作。然而,當我嘗試在16位TIFS應用此代碼,我得到以下錯誤

ValueError: image has wrong mode 

注意,PIL能夠載入,縮放和保存的16位TIFS沒有抱怨,所以我認爲這問題與過濾器有關。然而,ImageFilter documentation沒有說16位支持

有沒有什麼辦法可以解決它?

+0

並不十分有益的,但我打賭模糊FILT呃只是不支持它。即使Photoshop不支持16位模式下的每一個操作(可惜) – Skurmedel

+0

@Skurmedel ImageFilter文檔沒有提及16位支持,這讓我覺得這是一個可以解決的問題 –

回答

14

您的TIFF圖像的模式很可能是「我; 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」)'。 –

+1

如果不明顯:請注意'L'和'I'模式都是8位模式(參考:http://pillow.readthedocs.io/en/latest/handbook/concepts.html#modes)等等這裏顯示的代碼會將圖像的深度從16位降低到8位。 –

0

要繼續前進,請嘗試使用ImageMagick,查找PythonMagick鉤子到程序中。在命令提示符處,您可以使用convert.exe image-16.tiff -blur 2x2 output.tiff。由於源代碼需要編譯,因此沒有設法在我的Windows操作系統中安裝PythonMagick。