Pillow ImageEnhance 模块
下面给你一个 Pillow(PIL Fork)中 ImageEnhance 模块 的完整入门指南,包含所有增强器、参数解释、代码示例、批量处理、局部增强、常见应用场景及高级技巧。
(基于 Pillow ≥ 9.0,Python 3.8+)
1. 安装 Pillow
pip install --upgrade pillow
2. 基本导入
from PIL import Image, ImageEnhance
3. ImageEnhance 四大增强器
| 增强器 | 作用 | 关键参数 |
|---|---|---|
ImageEnhance.Contrast | 对比度 | factor > 1 增强,< 1 减弱 |
ImageEnhance.Brightness | 亮度 | 1.0 原图,>1 变亮,<1 变暗 |
ImageEnhance.Color | 色彩饱和度 | 1.0 原图,0 灰度,>1 更鲜艳 |
ImageEnhance.Sharpness | 锐度 | 1.0 原图,>1 更锐利,0 模糊 |
4. 基础用法:enhancer.enhance(factor)
img = Image.open("photo.jpg")
# 增强对比度
contrast = ImageEnhance.Contrast(img)
img_contrast = contrast.enhance(1.5) # 1.5 倍对比度
# 增强亮度
brightness = ImageEnhance.Brightness(img)
img_bright = brightness.enhance(1.2)
# 增强色彩
color = ImageEnhance.Color(img)
img_vivid = color.enhance(1.8)
# 增强锐度
sharpness = ImageEnhance.Sharpness(img)
img_sharp = sharpness.enhance(2.0)
img_contrast.save("contrast.jpg")
参数建议:
0.0→ 极致效果(如全黑/全白/灰度/极模糊)1.0→ 原图0.5 ~ 2.0→ 常用范围> 3.0→ 可能过曝/失真
5. 完整示例:一键美化照片
from PIL import Image, ImageEnhance
def beautify_image(input_path, output_path,
contrast=1.3, brightness=1.1,
color=1.4, sharpness=1.2):
img = Image.open(input_path).convert("RGB")
# 顺序很重要:先对比度 → 色彩 → 亮度 → 锐度
img = ImageEnhance.Contrast(img).enhance(contrast)
img = ImageEnhance.Color(img).enhance(color)
img = ImageEnhance.Brightness(img).enhance(brightness)
img = ImageEnhance.Sharpness(img).enhance(sharpness)
img.save(output_path, quality=95)
# 使用
beautify_image("dark.jpg", "beautified.jpg")
6. 高级技巧
6.1 局部增强(只增强人脸区域)
from PIL import Image, ImageEnhance, ImageDraw
img = Image.open("portrait.jpg")
face_mask = Image.new("L", img.size, 0)
draw = ImageDraw.Draw(face_mask)
draw.ellipse((150, 100, 350, 350), fill=255) # 假设人脸区域
# 只增强人脸部分的对比度和色彩
enhanced = ImageEnhance.Contrast(img).enhance(1.8)
enhanced = ImageEnhance.Color(enhanced).enhance(1.6)
# 使用 mask 融合
result = Image.composite(enhanced, img, face_mask)
result.save("face_enhanced.jpg")
6.2 自动增强(基于直方图)
from PIL import Image, ImageEnhance
import numpy as np
def auto_contrast(img, percentile=1):
"""自动对比度(类似 Photoshop Auto Contrast)"""
arr = np.array(img)
low, high = np.percentile(arr, (percentile, 100-percentile))
if high == low:
return img
lut = np.concatenate([
np.zeros(low, dtype=np.uint8),
np.linspace(0, 255, high - low).astype(np.uint8),
np.ones(255 - high, dtype=np.uint8) * 255
])
return Image.fromarray(lut[arr])
# 使用
img = Image.open("low_contrast.jpg")
auto_img = auto_contrast(img)
auto_img.save("auto_contrast.jpg")
6.3 批量处理整个文件夹
import os
from PIL import Image, ImageEnhance
def batch_enhance(input_dir, output_dir, **kwargs):
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
path = os.path.join(input_dir, filename)
img = Image.open(path).convert("RGB")
for enhancer_name, factor in kwargs.items():
enhancer_cls = getattr(ImageEnhance, enhancer_name)
img = enhancer_cls(img).enhance(factor)
img.save(os.path.join(output_dir, filename), quality=95)
# 使用
batch_enhance(
"raw_photos", "enhanced_photos",
Contrast=1.4, Color=1.5, Brightness=1.1, Sharpness=1.3
)
7. 增强器参数可视化对比
from PIL import Image, ImageEnhance
import math
def create_comparison(img_path, output_path):
img = Image.open(img_path).convert("RGB")
w, h = img.size
factors = [0.0, 0.5, 1.0, 1.5, 2.0, 3.0]
canvas_w = w * len(factors)
canvas = Image.new("RGB", (canvas_w, h * 4), "white")
enhancers = [
("Contrast", ImageEnhance.Contrast),
("Brightness", ImageEnhance.Brightness),
("Color", ImageEnhance.Color),
("Sharpness", ImageEnhance.Sharpness),
]
for row, (name, cls) in enumerate(enhancers):
for col, f in enumerate(factors):
enhanced = cls(img).enhance(f)
canvas.paste(enhanced, (col * w, row * h))
canvas.save(output_path)
create_comparison("sample.jpg", "enhance_comparison.jpg")
8. 常见应用场景
| 场景 | 推荐参数 |
|---|---|
| 夜景照片提亮 | Brightness=1.3~1.6 |
| 老照片修复 | Contrast=1.4, Color=1.2 |
| 产品图美化 | Contrast=1.3, Color=1.5, Sharpness=1.5 |
| 人像磨皮后锐化 | Sharpness=1.8(轻微) |
| 艺术灰度图 | Color=0.0 |
9. 常见问题 & 解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
| 增强后图像过曝/颜色失真 | factor 太大 | 控制在 0.8~2.0 |
| 增强后噪点明显 | 原图有噪点 + 锐化 | 先去噪(如 ImageFilter.MedianFilter) |
| 局部增强边缘生硬 | mask 过渡不自然 | 使用模糊 mask 或羽化 |
enhance() 返回黑图 | factor=0.0 | 检查参数 |
10. 官方文档
- https://pillow.readthedocs.io/en/stable/reference/ImageEnhance.html
完整一键美化脚本(推荐保存为 beautify.py)
#!/usr/bin/env python3
from PIL import Image, ImageEnhance
import argparse
import os
def main():
parser = argparse.ArgumentParser(description="一键美化照片")
parser.add_argument("input", help="输入图片路径")
parser.add_argument("-o", "--output", help="输出路径", default=None)
parser.add_argument("--contrast", type=float, default=1.3)
parser.add_argument("--brightness", type=float, default=1.1)
parser.add_argument("--color", type=float, default=1.4)
parser.add_argument("--sharpness", type=float, default=1.2)
args = parser.parse_args()
output = args.output or os.path.splitext(args.input)[0] + "_enhanced.jpg"
img = Image.open(args.input).convert("RGB")
img = ImageEnhance.Contrast(img).enhance(args.contrast)
img = ImageEnhance.Color(img).enhance(args.color)
img = ImageEnhance.Brightness(img).enhance(args.brightness)
img = ImageEnhance.Sharpness(img).enhance(args.sharpness)
img.save(output, quality=95, subsampling=0)
print(f"已保存: {output}")
if __name__ == "__main__":
main()
使用方法:
python beautify.py photo.jpg -o pretty.jpg --color 1.6
需要我帮你实现 人像自动美颜、夜景智能提亮、老照片上色、艺术滤镜叠加 等高级功能吗?直接说需求,我给你完整代码!