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()