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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM