57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
# -*- coding:utf-8 -*-
|
||
# @Author len
|
||
# @Create 2023/10/31 20:24
|
||
|
||
|
||
from PIL import Image
|
||
import os
|
||
import random
|
||
|
||
# 设置路径
|
||
background_folder = r'D:\Waste\嵌入式\数据集\背景'
|
||
overlay_image_path = r'D:\Waste\嵌入式\数据集\交通标志\禁止通行.png'
|
||
output_folder = r'D:\Waste\嵌入式\数据集\交通标志\002\禁止通行'
|
||
|
||
# 读取叠加图片
|
||
overlay = Image.open(overlay_image_path)
|
||
overlay = overlay.convert("RGBA")
|
||
|
||
# 确保输出目录存在
|
||
if not os.path.exists(output_folder):
|
||
os.makedirs(output_folder)
|
||
|
||
# 遍历背景图片文件夹中的所有文件
|
||
for background_image_name in os.listdir(background_folder):
|
||
if background_image_name.endswith(('.png', '.jpg', '.jpeg')): # 检查文件扩展名
|
||
background_path = os.path.join(background_folder, background_image_name)
|
||
background = Image.open(background_path)
|
||
background = background.convert("RGBA")
|
||
|
||
# 随机选择一个缩放因子在90%到110%之间
|
||
scale_factor = random.uniform(0.1, 0.5)
|
||
|
||
# 缩放overlay图片
|
||
new_size = (int(overlay.width * scale_factor), int(overlay.height * scale_factor))
|
||
scaled_overlay = overlay.resize(new_size, Image.Resampling.LANCZOS)
|
||
|
||
# 随机选择overlay的位置
|
||
max_x = background.width - scaled_overlay.width
|
||
max_y = background.height - scaled_overlay.height
|
||
if max_x < 0 or max_y < 0:
|
||
print(f"Scaled overlay image is larger than background {background_image_name}. Skipping.")
|
||
continue
|
||
rand_x = random.randint(0, max_x)
|
||
rand_y = random.randint(0, max_y)
|
||
|
||
# 将叠加图片放在背景图片上的随机位置
|
||
background.paste(scaled_overlay, (rand_x, rand_y), scaled_overlay)
|
||
|
||
# 将结果保存为新图片
|
||
output_path = os.path.join(output_folder, background_image_name)
|
||
# 如果输出文件格式要求为JPEG,确保转换为RGB模式
|
||
if output_path.lower().endswith('.jpg') or output_path.lower().endswith('.jpeg'):
|
||
background = background.convert('RGB')
|
||
background.save(output_path)
|
||
|
||
print("所有图片处理完成。")
|