如何正确使用Pillow库的Dithering抖动功能
Pillow 图像抖动(Dithering)功能调用方法
代码错误点
当前传参有误:Image.Dither是Pillow内置的抖动模式枚举类,不能直接作为参数值传入,必须指定枚举下的具体常量。
注意:
dither参数仅在转换为低色深模式时生效,比如1位黑白模式("1")、256色调色板模式("P")。转"L"8位灰度模式时本身支持256级灰阶,不需要抖动处理,传入dither参数不会生效。
可选抖动模式
Image.Dither.NONE:关闭抖动,颜色转换时直接匹配最近色Image.Dither.FLOYDSTEINBERG:使用Floyd-Steinberg误差扩散抖动算法,低色深下视觉还原度更好,是官方标准抖动实现
修正后参考代码
import os from PIL import Image ORIGIN_PATH = "/home/prajakta/Tasks/Evaluate detection model on scanned customer documents/scanned_docs/" for filename in os.listdir(ORIGIN_PATH): # 用os.path.join拼接路径,避免不同系统下路径分隔符兼容问题 file_full_path = os.path.join(ORIGIN_PATH, filename) img = Image.open(file_full_path) # 转8位灰度图无需传dither参数 # gray_img = img.convert("L") # 转1位黑白图,开启Floyd-Steinberg抖动 dither_img = img.convert("1", dither=Image.Dither.FLOYDSTEINBERG) # 转256色调色板图,关闭抖动 # p_img = img.convert("P", dither=Image.Dither.NONE) dither_img.show()
低版本兼容说明
如果使用的Pillow版本低于9.1.0,不支持Image.Dither枚举写法,可以替换为旧版全局常量,效果完全一致:
- 开启Floyd-Steinberg抖动:传参
dither=Image.FLOYDSTEINBERG - 关闭抖动:传参
dither=Image.NONE
内容的提问来源于stack exchange,提问作者aarya
相关产品推荐
相关产品推荐

