1. 图像亮度调整

任务说明

本案例实现图像亮度的随机调整,用于数据增强场景。给定一张输入图像,程序将对其应用随机亮度偏移(在预设范围内),输出增强后的图像。该操作可提升模型对不同光照条件的泛化能力。

环境依赖

需要 Python 3.8+,以及 numpy 和 Pillow(或 opencv-python)。以下实现使用 Pillow 与 numpy,二者可通过 pip install numpy pillow 安装。

完整实现

import numpy as np
from PIL import Image
import random

def adjust_brightness(image_path, output_path, brightness_range=(-50, 50), seed=None):
    """
    对图像进行随机亮度调整。
    
    Args:
        image_path: 输入图像路径
        output_path: 输出图像保存路径
        brightness_range: (min, max) 亮度偏移范围,单位为灰度级别
        seed: 随机种子,用于复现结果
    
    Returns:
        dict: 包含实际使用的亮度偏移值
    """
    if seed is not None:
        random.seed(seed)
    
    # 读取图像并转为 RGB
    img = Image.open(image_path).convert('RGB')
    arr = np.array(img, dtype=np.float32)
    
    # 在指定范围内随机选择亮度偏移
    delta = random.uniform(brightness_range[0], brightness_range[1])
    
    # 对每个通道添加偏移量
    adjusted = arr + delta
    
    # 裁剪到有效范围 [0, 255] 并转回 uint8
    adjusted = np.clip(adjusted, 0, 255).astype(np.uint8)
    
    # 保存结果
    result_img = Image.fromarray(adjusted)
    result_img.save(output_path)
    
    return {"brightness_delta": delta}

if __name__ == "__main__":
    # 示例调用:对 input.jpg 进行随机亮度调整,保存为 output.jpg
    info = adjust_brightness("input.jpg", "output.jpg", brightness_range=(-80, 80), seed=42)
    print(f"实际亮度偏移: {info['brightness_delta']:.2f}")

运行方式

  1. 将上述代码保存为 brightness_aug.py。
  2. 准备一张测试图像,命名为 input.jpg,放在同一目录下。
  3. 执行命令:python brightness_aug.py

验证方法

  • 程序运行后,检查是否生成了 output.jpg 文件。
  • 用图像查看工具打开 output.jpg,确认其亮度与 input.jpg 存在可见差异(偏移量非零时)。
  • 使用固定 seed=42 重复运行两次,对比两次输出的 output.jpg 应完全一致(像素级相同),证明随机过程可复现。
  • 若设置 brightness_range=(0,0),则输出应与输入像素完全一致,用于验证无偏移时的正确性。

关键说明

亮度偏移量 delta 在指定范围内均匀随机选取,正值使图像变亮,负值变暗。实现直接对 RGB 三通道添加相同偏移量,保持色调不变。实际使用中可根据数据集光照分布调整 brightness_range 的幅度。若需批量处理,可在循环中调用 adjust_brightness 函数并传入不同 seed 或省略 seed 参数。