이미지 좌표를 표현하는 방식은 아래와 같이
왼쪽 상단이 0.0으로 시작하여
먼저 pillow 라이브러를 다운을 받아보자
!pip install pillow
PIL로 부터 Image를 받아오면 된다.
# 대소문자 주의
import os
from PIL import Image
print(os.getcwd())
img_path = './sample_image.jpg'
img = Image.open(img_path)
img를 살펴보면 type은 객체이며, size 를 tuple 형식으로 받을 수 있다.
show() 함수는 화면에 이미지를 띄워서 보여줍니다.
img_path = './sample_image.jpg'
img = Image.open(img_path)
img.show()
resize
img_path = './sample_image.jpg'
img = Image.open(img_path)
# 이미지 객체에서만 동작합니다.
w, h = img.size
rs_img = img.resize((h, w))
rs_img.show()
<결과>
이미지 대칭 함수
transpose()
flipped_img = img.transpose('대칭 또는 대칭 옵션')
이미지 좌우 대칭: Image.FLIP_LEFT_RIGHT
이미지 상하 대칭: Image.FLIP_TOP_BOTTO
flip_lr_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flip_lr_img.show()
flip_tb_img = img.transpose(Image.FLIP_TOP_BOTTOM)
flip_tb_img.show()
이미지 회전 함수
rotate()
img.rotate(반시계 방향으로 회전할 각도)
이미지를 반시계방향으로 회전합니다
90, 180, 270이 아닌 각도로 회전하여 발생하는 여백에 대해서는 검은색으로 채워집니다.
원본 이미지의 범위를 벗어나는 부분은 삭제됩니다
이미지 객체 저장 함수
save()
import os
save_path = os.path.dirname(img_path) + '/fixed_img.jpg'
rot_img = img.rotate(45.6)
rot_img.save(save_path) # 이미지 객체를 전달한 경로로 저장
도형 덧그리기 함수
from PIL import Image, ImageDraw
# img == 이미지 객체
draw = ImageDraw.Draw(img)
# 선 그리기
draw.line(선의 양 끝 좌표, fill=색상, width=선 굵기)
선의 양 끝점 좌표. 두 가지 형태가 가능: [x1, y1, x2, y2] 혹은 [(x1, y1), (x2, y2)]
좌표를 리스트가 아닌 튜플로 전달해도 됨. (x1, y1, x2, y2) 혹은 ((x1, y1), (x2, y2)) 도 가능
선의 색상. 두 가지 형태가 가능: “red”, “blue” 등의 색 명칭 혹은 (R, G, B) 색상 값
(R, G, B) 색상 값은 튜플로 전달해야함.
선 굵기의 단위는 픽셀
from PIL import Image, ImageDraw
w, h = img.size
img = Image.open(img_path)
draw = ImageDraw.Draw(img)
# RGB 값으로
draw.line([0, 0, w, h], fill=(255, 0, 0), width=5)
draw.line([w, 0, 0, h], fill=(255, 0, 0), width=5)
사각형을 그리고 싶다면
draw.rectangle(왼쪽위&오른쪽 아래 꼭지점 좌표, fill=채우기 색상, outline=외곽선 색상, width=외곽선 두께)
# 좌표 값: 왼쪽 위 좌표가 (x1, y1), 오른쪽 아래 좌표가 (x2, y2)라면 [x1, y1, x2, y2] 혹은 [(x1, y1), (x2, y2)] 값을 전달하면 됩니다.
# fill: 색상 이름 문자열 or (R, G, B) or None # None값으로 지정하거나, 명시하지 않으면 채우기 없음
# outline: fill과 동일
# 이미지를 9분할 하여 가운데 부분을 검게 칠하는 예제
img = Image.open(img_path)
w, h = img.size
xy = (w // 3, h // 3, (w * 2) // 3, (h * 2) // 3)
draw = ImageDraw.Draw(img)
draw.rectangle(xy, fill='black')
img.show()
원형을 그리고 싶다면
draw.ellipse(원과 외접하는 사각형의 좌표, fill=채우기 색상, outline=외곽선 색상, width=외곽선 두께)
# draw.ellipse는 원과 외접하는 사각형의 좌표를 통해 원을 표현합니다.
# [x1, y1, x2, y2] 혹은 [(x1, y1), (x2, y2)] 값을 전달하면 됩니다.
# fill: 색상 이름 문자열 or (R, G, B) or None # None값으로 지정하거나, 명시하지 않으면 채우기 없음
# outline: fill과 동일
img = Image.open(img_path)
w, h = img.size
draw = ImageDraw.Draw(img)
xy = [200, 200, 770, 500]
draw.ellipse(xy, outline=(0, 255, 0), width=5)
img.show()
이미지 관련 라이브러
albumentations
- 도큐먼트: https://albumentations.ai/docs/getting_started/installation/
- 데모: https://demo.albumentations.ai/
먼저 아래와 같이 라이브러리 설치를 하고
!pip install -U albumentations
!pip install pillow
!pip install opencv-python
!pip install matplotlib
아래와 같이 cv2를 import 하여
새로운 이미지를 text로 받아와 처리할 수 있다.
import albumentations as A
from PIL import Image
import cv2
image = cv2.imread("sample_image.jpg")
transform = A.Compose([
A.RandomCrop(width=256, height=256),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
A.CLAHE(always_apply=False, p=1.0, clip_limit=(30, 100), tile_grid_size=(73, 65))
])
transformed = transform(image=image)
transformed_image = transformed["image"]
from matplotlib import pyplot as plt
plt.imshow(transformed_image)
'PYTHON > 기본 문법' 카테고리의 다른 글
AI, 머신러닝, 딥러닝 기초 (10) | 2023.06.01 |
---|---|
파이썬 엑셀 업무 자동화 - xlwings (9) | 2023.06.01 |
파이썬을 이용한 파일 자동화 - (2) glob (7) | 2023.05.31 |
파이썬을 이용한 파일 자동화 - (1) os 라이브러리 (1991) | 2023.05.31 |
파이썬을 이용한 머신러닝 ML 기초 (0) | 2022.08.01 |
댓글