【数据增强】添加缩小、水平翻转、旋转、增加图像噪声和增亮功能

import os
import shutil
from PIL import Image
import numpy as np

def strong_dataset(im_path, im_name, save_path=''):
    im = Image.open(im_path)
    
    # 旋转
    part1_im = im.transpose(Image.ROTATE_90)
    part1_im.save(os.path.join(save_path, '90_'+im_name))
    
    part2_im = im.transpose(Image.ROTATE_180)
    part2_im.save(os.path.join(save_path, '180_'+im_name))
    
    part3_im = im.transpose(Image.ROTATE_270)
    part3_im.save(os.path.join(save_path, '270_'+im_name))
    
    # 上下左右平移
    width, height = im.size
    shift_left_im = im.crop((0, 0, width-10, height))
    shift_left_im.save(os.path.join(save_path, 'shift_left_'+im_name))
    
    shift_right_im = im.crop((10, 0, width, height))
    shift_right_im.save(os.path.join(save_path, 'shift_right_'+im_name))
    
    shift_up_im = im.crop((0, 0, width, height-10))
    shift_up_im.save(os.path.join(save_path, 'shift_up_'+im_name))
    
    shift_down_im = im.crop((0, 10, width, height))
    shift_down_im.save(os.path.join(save_path, 'shift_down_'+im_name))
    
    # 缩小
    small_im = im.resize((int(width*0.8), int(height*0.8)))
    small_im.save(os.path.join(save_path, 'small_'+im_name))
    
    # 水平翻转
    flip_im = im.transpose(Image.FLIP_LEFT_RIGHT)
    flip_im.save(os.path.join(save_path, 'flip_'+im_name))
    
    # 增加图像噪声
    noisy_im = np.array(im)
    noise = np.random.normal(0, 25, noisy_im.shape)
    noisy_im = noisy_im + noise
    noisy_im = np.clip(noisy_im, 0, 255)
    noisy_im = Image.fromarray(noisy_im.astype('uint8'))
    noisy_im.save(os.path.join(save_path, 'noisy_'+im_name))
    
    # 增亮
    bright_im = ImageEnhance.Brightness(im).enhance(1.5)
    bright_im.save(os.path.join(save_path, 'bright_'+im_name))

if __name__ == '__main__':
    # 遍历一个文件夹所有的图片进行处理,并保存
    ori_path = r'VOCdevkit\VOC2007\JPEGImages'
    for ori_name in os.listdir(ori_path):
        temp = os.path.join(ori_path, ori_name)
        strong_dataset(temp, ori_name, save_path=ori_path)

前言

        参加了“智蔗见智·向新而生”广西第二届人工智能大赛,但是他给的数据集只有不到100张,对于语义分割模型的训练来说实在是杯水车薪,我们队的处理方案是:先按照十字架方式裁剪图片,之后再进行3个角度的翻转,一系列数据增强的操作了数据集的数量是原来的4*4=16倍,已经可以满足模型的训练要求!而本文正是记录旋转这个数据增强的方式。

记录按十字架裁剪图片方式如下链接:

十字架裁剪图片icon-default.png?t=N7T8http://t.csdn.cn/tAXp1


【数据增强】90°、180°和270°翻转图片(*4)

效果展示

旋转之前的图片:

旋转之后的图片:

90° 

180° 

270° 

代码 

 单张图片:

遍历目录:


效果展示

旋转之前的图片:

旋转之后的图片:

90° 

180° 

270° 

成品库

'''
@param:im_path,图片路径,例如:img/test.png
@param:im_name,图片名称,例如:test.png
@param:save_path,保存路径,默认为工作路径
'''

import os
import shutil
from PIL import Image
'''
@param:im_path,图片路径,例如:img/test.png
@param:im_name,图片名称,例如:test.png
@param:save_path,保存路径,默认为工作路径
'''
def strong_dataset(im_path, im_name, save_path=''):
   im = Image.open(im_path)
   part1_im = im.transpose(Image.ROTATE_90)
   part1_im.save(os.path.join(save_path, '90_'+im_name))
   part2_im = im.transpose(Image.ROTATE_180)
   part2_im.save(os.path.join(save_path, '180_'+im_name))
   part3_im = im.transpose(Image.ROTATE_270)
   part3_im.save(os.path.join(save_path, '270_'+im_name))

 1.单张图片处理代码:

import os
import shutil
from PIL import Image

def strong_dataset(im_path, im_name, save_path=''):
   im = Image.open(im_path)
   part1_im = im.transpose(Image.ROTATE_90)
   part1_im.save(os.path.join(save_path, '90_'+im_name))
   part2_im = im.transpose(Image.ROTATE_180)
   part2_im.save(os.path.join(save_path, '180_'+im_name))
   part3_im = im.transpose(Image.ROTATE_270)
   part3_im.save(os.path.join(save_path, '270_'+im_name))

if __name__ == "__main__":
    strong_dataset('img/test.png', 'test.png', save_path='img')

2.遍历目录图片代码:

import os
import shutil
from PIL import Image

def strong_dataset(im_path, im_name, save_path=''):
   im = Image.open(im_path)
   part1_im = im.transpose(Image.ROTATE_90)
   part1_im.save(os.path.join(save_path, '90_'+im_name))
   part2_im = im.transpose(Image.ROTATE_180)
   part2_im.save(os.path.join(save_path, '180_'+im_name))
   part3_im = im.transpose(Image.ROTATE_270)
   part3_im.save(os.path.join(save_path, '270_'+im_name))

if __name__ == '__main__':
    # 遍历一个文件夹所有的图片进行旋转,并且保存
    ori_path = r'VOCdevkit\VOC2007\JPEGImages'
    for ori_name in os.listdir(ori_path):
        temp = os.path.join(ori_path, ori_name)
        strong_dataset(temp, ori_name, save_path=ori_path)


        

3.输出说明 

'''
假设:你有这样一张图片 test.png
那么裁剪后将保存为

90_test.png 
180_test.png 
270_test.png 
原图片不会删除!
'''

完毕!

如果大家觉得有用,欢迎三连~ 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大气层煮月亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值