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}")
运行方式
- 将上述代码保存为
brightness_aug.py。 - 准备一张测试图像,命名为
input.jpg,放在同一目录下。 - 执行命令:
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 参数。