栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 批量随机粘贴png图片,进行数据增强,并保存为jpg

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 批量随机粘贴png图片,进行数据增强,并保存为jpg

  • 将png图片粘贴到jpg图片上,针对某类数据做数据增强
  • 对所有png图片进行随机resize(我设置的范围为680~780,可自己手动修改)、随机顺时针、逆时针旋转0-30°
  • 支持批量粘贴png图片到大量图片上
  • 代码有详细注释
  • 生成的图片命名规则:主图_蒙层图_粘贴次数.jpg
  • 效果图如下,展示一张的效果:
    png图:

    被粘贴的图:

粘贴后的效果:

代码如下:

from PIL import Image
import random
import os
from tqdm import tqdm
import configparser


def paste_enhance(png_path, images_paste_path, save_images_path, paste_num):
    os.makedirs(save_images_path, exist_ok=True)
    files = os.listdir(png_path)
    paste_files = os.listdir(images_paste_path)

    for png_img in files:
        png_name = os.path.splitext(png_img)[0]
        im = Image.open(f"{png_path}/{png_img}")  # 读取蒙层

        for n in range(paste_num):  # 蒙层在主图上粘贴的次数,默认一次
            for paste_img in tqdm(paste_files):
                main_img_name = os.path.splitext(paste_img)[0]
                main_img = Image.open(f"{images_paste_path}/{paste_img}")  # 读取被粘贴的主图
                w, h = main_img.size

                random_result = dict()
                random_result['num_resize'] = random.randint(680, 780)  # 闭区间,保存随机resize尺寸
                random_result['rotate_F'] = random.randint(1, 30)  # 随机逆时针旋转角度、随机顺时针旋转角度
                random_result['rotate_T'] = random.randint(-30, -1)  # 随机顺时针旋转角度
                random_result['status'] = random.randint(-1, 0)  # 随机抽状态,-1逆时针,0顺时针
                try:
                    random_result['cut_x_left'] = random.randint(0, w - random_result['num_resize'])  # 随机主图-蒙层图范围的左上角x
                    random_result['cut_y_left'] = random.randint(0, h - random_result['num_resize'])  # 随机主图-蒙层图范围的左上角y
                except ValueError:  # 蒙层图resize比主图尺寸大,那就不粘贴
                    continue

                img_resize = im.resize((random_result['num_resize'], random_result['num_resize']))  # resize图片

                if random_result['status'] == -1:  # 随机旋转图片
                    img_rotate = img_resize.rotate(random_result['rotate_F'])
                else:
                    img_rotate = img_resize.rotate(random_result['rotate_T'])

                x_left, y_left = random_result['cut_x_left'], random_result['cut_y_left']
                x_right = random_result['cut_x_left'] + random_result['num_resize']
                y_right = random_result['cut_y_left'] + random_result['num_resize']

                main_img.paste(img_rotate, (x_left, y_left, x_right, y_right), img_rotate)  # 粘贴蒙层图片
                save_img = main_img.convert('RGB')  # 转换为jpg图片
                save_img.save(f"{save_images_path}/{main_img_name}_{png_name}_{n}.jpg")


if __name__ == "__main__":
    cf = configparser.ConfigParser()
    cf.read('config.ini', encoding='utf-8')
    png = cf.get('config', 'png')
    images_path = cf.get('config', 'images_path')
    save_path = cf.get('config', 'save_path')
    num = int(cf.get('config', 'num'))

    paste_enhance(png, images_path, save_path, num)

config.ini 文件:

[config]
;png蒙层图片所在文件夹地址
png = /media/test/png

;被粘贴主图所在文件夹地址
images_path = /media/test/images

;粘贴后的图片保存的文件夹地址
save_path = /media/test/save

;蒙层粘贴到主图的次数
num = 1

批量增强后的效果,13张png蒙层图,460张主图,增强后有5101张图片,效果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号