如何用Python做图片augmentation 让生成的车牌图片模拟真实效果
实现车牌真实化增强并批量保存的方案
前置依赖
首先安装所需的Python工具库:
pip install opencv-python albumentations numpy
实现逻辑
我们通过模拟真实场景中车牌会遇到的各类干扰效果来完成增强,覆盖的常见真实场景包括:
- 拍摄角度倾斜带来的透视、仿射形变
- 车辆移动、对焦不准带来的运动模糊、高斯模糊
- 不同光照条件下的亮度、对比度、色彩偏移
- 摄像头传感器带来的各类噪声
- 车牌落灰、掉漆、杂物遮挡、雨水冲刷等污渍效果
可直接运行的实现代码
替换代码中的输入、输出文件夹路径为你自己的本地路径即可运行:
import cv2 import os import albumentations as A # 自定义路径配置 INPUT_FOLDER = "替换为你存放原始生成车牌的文件夹路径" OUTPUT_FOLDER = "替换为你要存放增强后车牌的文件夹路径" # 自动创建输出文件夹 os.makedirs(OUTPUT_FOLDER, exist_ok=True) # 定义真实化增强流水线,可根据需求调整各变换的触发概率、参数范围 transform = A.Compose([ # 模拟角度倾斜形变 A.Perspective(scale=(0.05, 0.12), keep_size=True, p=0.7), A.Affine(rotate=(-12, 12), shear=(-6, 6), p=0.6), # 模拟拍摄模糊 A.OneOf([ A.GaussianBlur(blur_limit=(3, 7), p=0.5), A.MotionBlur(blur_limit=(3, 9), p=0.5), ], p=0.6), # 模拟传感器噪声 A.OneOf([ A.GaussNoise(var_limit=(10.0, 50.0), p=0.5), A.ISONoise(intensity=(0.1, 0.3), p=0.5), A.SaltAndPepper(noise_limit=0.01, p=0.3), ], p=0.5), # 模拟光照变化 A.RandomBrightnessContrast(brightness_limit=(-0.3, 0.3), contrast_limit=(-0.2, 0.2), p=0.7), A.HueSaturationValue(hue_shift_limit=10, sat_shift_limit=20, val_shift_limit=10, p=0.5), # 模拟污渍、遮挡 A.RandomShadow(shadow_roi=(0, 0, 1, 1), num_shadows_lower=1, num_shadows_upper=2, shadow_dimension=4, p=0.3), A.RandomRain(drop_length=1, blur_value=1, p=0.2), ]) # 批量处理所有图片 for filename in os.listdir(INPUT_FOLDER): # 过滤非图片文件,可按需补充支持的格式 if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')): input_path = os.path.join(INPUT_FOLDER, filename) output_path = os.path.join(OUTPUT_FOLDER, filename) # 读取图片 img = cv2.imread(input_path) if img is None: continue # 执行增强 augmented = transform(image=img) aug_img = augmented["image"] # 保存处理后的图片 cv2.imwrite(output_path, aug_img)
参数调整说明
你可以根据自己的真实效果需求修改增强管道的参数:
- 变换项的
p参数代表该变换被触发的概率,取值范围0到1,值越大越容易触发 - 各类变换的数值范围可以按需调整,比如想要更大的倾斜角度就调大
Affine的rotate参数范围 - 不需要的变换项直接删除即可
内容的提问来源于stack exchange,提问作者k_p
相关产品推荐
相关产品推荐

