AI/🗑 Etc

YOLO - 이미지 증가(image augmentation) 파이썬 코드

키깡 2021. 4. 12.
728x90

정보통신공학전공 졸업 작품 당시 시각 장애인 의류 탐지기를 주제로 하였었는데, 그 때 포스팅 해 둔 글을 남겨두려 한다.


아래의 그림과 같이 img폴더의 하위에 img_aug 파일이 있고, img 폴더안에 여러 사진들이 있을 때,

from PIL import Image, ImageEnhance, ImageChops import glob import numpy as np import random import cv2 import os path = "./img" file_list = os.listdir(path) images = [Image.open(file).convert('RGB').resize((300, 300)) for file in glob.glob("img/*.jpg")]  save = "./img/img_aug/"  for i, image in zip(file_list, images):     save_path = save     save_path = save + i[:-4]     #밝기     enhancer = ImageEnhance.Brightness(image)     brightness_image = enhancer.enhance(1.8)     brightness_image.save(save_path+'_brightness.jpg')      #좌우 대칭     horizonal_flip_image = image.transpose(Image.FLIP_LEFT_RIGHT)     horizonal_flip_image.save(save_path+'_horizonal_flip.jpg')      #상하 대칭     vertical_flip_image = image.transpose(Image.FLIP_TOP_BOTTOM)     vertical_flip_image.save(save_path+'_vertical_flip.jpg')      #좌우 이동     width, height = image.size     shift = random.randint(0, width * 0.2)     horizonal_shift_image = ImageChops.offset(image, shift, 0)     horizonal_shift_image.paste((0), (0, 0, shift, height))     horizonal_shift_image.save(save_path+'_horizonal_shift.jpg')      #상하 이동     width, height = image.size     shift = random.randint(0, height * 0.2)     vertical_shift_image = ImageChops.offset(image, 0, shift)     vertical_shift_image.paste((0), (0, 0, width, shift))     vertical_shift_image.save(save_path+'_vertical_shift.jpg')      #회전     rotate_image = image.rotate(random.randint(-30, 30))     rotate_image.save(save_path+'_rotate.jpg')      #기울기     #cx, cy = 0.1, 0     #cx, cy = 0, 0.1     cx, cy = 0, random.uniform(0.0, 0.3)     shear_image = image.transform(         image.size,         method=Image.AFFINE,         data=[1, cx, 0,               cy, 1, 0,])     shear_image.save(save_path+'_shear.jpg')      #확대 축소     zoom = random.uniform(0.7, 1.3) #0.7 ~ 1.3     width, height = image.size     x = width / 2     y = height / 2     crop_image = image.crop((x - (width / 2 / zoom), y - (height / 2 / zoom), x + (width / 2 / zoom), y + (height / 2 / zoom)))     zoom_image = crop_image.resize((width, height), Image.LANCZOS)     zoom_image.save(save_path+'_zoom.jpg')

img_aug 폴더안에 8가지의 변형 이미지가 저장된다.

댓글