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