• 7. 进行图片的数据补全和增强(随机亮度,随机饱和度,随机翻转) Image.open(进行图片的读入) 2.ImageEnhance.Brightness(亮度变化) 3.ImageEnhance.Contrast(饱和度变化) 4.enhance_image.transpose(图片随机翻转) 5.enhance_image.save(进行图片保存)


    1.Image.open(image_path)  进行图片的打开

    参数说明:image_path 表示图片的路径

    2. ImageEnhance.Brightness(image)  # 进行图片的亮度变化 

    enhance_image.enhance(0.3)

    参数说明:image表示需要进行亮度变化的图片

    3. ImageEnhance.Contrast(image)

    enhance_image.enhance(0.2)

    参数说明:image表示需要进行饱和度变化的图片

    4.enhance_image.transpose(Image.FLIP_LETF_RIGHT) 进行图片的随机翻转

    参数说明:enhance_image表示需要翻转的图片, Image.FLIP_LETF_RIGHT表示图片的动作

    5.enhance_image.save(image_path) 将图片进行保存

    参数说明:image_path表示保存的图片路径

    对于一个人的图片而言,可能存在每个人的文件夹的图片数量不一致的情况

    因此我们对每个人文件夹的图片大于100张小于600张的图片进行补全操作

    这里使用随机亮度,随机饱和度,以及随机进行翻转,对图片的数量进行增强

    代码:

    第一步:对数据进行os.listdir(path) 获得当前目录下的文件,一直到单个people的目录下,使用count做图片个数的记录,如果小于min_index 和 大于max_index不做操作,否则进行图片的增加操作

    第二步:对图片进行增加操作,循环max_index - len(list),使用需要的图片数目减去当前的图片个数,使用random.randint(0, len()) 获得其中的图片的路径

    第三步:循环随机获得的图片路径,使用Image.open() 打开图片,使用ImageEnhance.Bright进行图片的亮度随机

    第四步: 使用.save进行数据增强后的图片保存

    # -*- coding: utf-8 -*-
    ''' 
    Created on 2019/7/4/0004 14:08
        
    @Author : Sheng1994
     '''
    
    
    import os
    import random
    from PIL import Image
    from PIL import ImageEnhance
    
    
    def enhance_image(image_path):
    
        image = Image.open(image_path)
    
        # 随机亮度
        enhance_image = ImageEnhance.Brightness(image)
        bright = random.uniform(0.2, 1.8)
        enhance_image = enhance_image.enhance(bright)
    
        # 随机饱和度
        enhance_image = ImageEnhance.Contrast(enhance_image)
        contrast = random.uniform(0.2, 1.8)
        enhance_image = enhance_image.enhance(contrast)
    
        # 随机左右翻转
        if random.randint(0, 1) == 1:
            enhance_image = enhance_image.transpose(Image.FLIP_LEFT_RIGHT)
    
        return enhance_image
    
    
    def add_image(folder_list, folder_path, max_number):
    
        folder_length = len(folder_list)
        random_folder_list = []
    
        for _ in range(max_number - folder_length):
            index = random.randint(0, folder_length - 1)
            random_folder_list.append(folder_list[index])
    
        add_path = 'add'
        full_add_path = folder_path + os.sep + add_path
        if not os.path.exists(full_add_path):
            os.mkdir(full_add_path)
    
        counter = 0
        for path in random_folder_list:
            new_image = enhance_image(path)
            new_image.save(full_add_path + os.sep + str(counter) + '.jpg')
            counter += 1
    
    
    
    def image_augmentation(db_folder, limit_number=100, max_number=600):
    
        number = 0
        for people_folder in os.listdir(db_folder):
            number += 1
    
            src_people_path = db_folder + os.sep + people_folder
    
            counter = 0
            people_folder_list = []
            for vedio_folder in os.listdir(src_people_path):
    
                src_vedio_path = src_people_path + os.sep + vedio_folder
    
                for img_file in os.listdir(src_vedio_path):
                    counter += 1
                    src_img_path = src_vedio_path + os.sep + img_file
                    people_folder_list.append(src_img_path)
    
            if counter < limit_number or counter >= max_number:
                continue
            else:
                add_image(people_folder_list, src_people_path, max_number)
    
                print(people_folder + ': id--->' + str(number) + '--->OK')
    
    
    
    
    def run():
        random.seed(7)
        db_folder = 'image\origin'
        image_augmentation(db_folder)
    
    if __name__ == '__main__':
        run()
  • 相关阅读:
    接水问题
    几种走法
    过河卒

    计数问题
    Java和C或C++的数据类型对照表
    记一次在家办公远程公司数据库的解决方案
    java nio 笔记
    mysql绿色版安装 遇到的问题
    mysql绿色版安装
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/11134294.html
Copyright © 2020-2023  润新知