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

需要我帮你实现 人像自动美颜、夜景智能提亮、老照片上色、艺术滤镜叠加 等高级功能吗?直接说需求,我给你完整代码!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注