본문 바로가기
AI-driven Methodology/CV (Computer Vision)

[Computer Vision] Pillow를 이용한 이미지 처리

by goatlab 2022. 6. 13.
728x90
반응형
SMALL

Pillow를 이용한 이미지 처리

 

Python 이미지 처리 패키지 중에 Pillow가 있다. Pillow는 이전에 사용되던 PIL (Python Imaging Library) 패키지를 대체하기 위한 것이다. JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉽다는 장점이 있다. PIL 패키지의 대체이므로 임포트 이름이 PIL 패키지와 같다.

 

import PIL
PIL.__version__
 
 

이미지 읽고 쓰기

 

# 실습을 위한 이미지 파일
!wget -O logo.png https://www.python.org/static/community_logos/python-logo-master-v3-TM.png
--2019-07-14 13:26:37--  https://www.python.org/static/community_logos/python-logo-master-v3-TM.png
Resolving www.python.org (www.python.org)... 151.101.72.223, 2a04:4e42:11::223
Connecting to www.python.org (www.python.org)|151.101.72.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 83564 (82K) [image/png]
Saving to: ‘logo.png’

logo.png            100%[===================>]  81.61K   437KB/s    in 0.2s    

2019-07-14 13:26:37 (437 KB/s) - ‘logo.png’ saved [83564/83564]

 

Pillow 패키지에서 제공하는 Image 클래스를 사용하면 여러가지 다양한 포맷의 이미지를 읽고 변환하여 저장할 수 있다. open 메서드는 이미지 파일을 열 수 있다.

 

from PIL import Image

img_logo_png = Image.open("./logo.png")
img_logo_png.size
(601, 203)

 

주피터 노트북에서는 Image 클래스 객체를 바로 볼 수 있다.

 

img_logo_png

 

파일로 저장할 때는 save 메서드를 사용한다. 이 때 확장자를 지정하면 해당 이미지 형식으로 자동 변환하여 저장한다.

 

img_logo_png.save("./logo.bmp")
img_logo_bmp = Image.open("./logo.bmp")

 

이미지 데이터 처리를 위해 Image 클래스 객체를 NumPy 배열로 변환할 때는 np.array 함수를 사용한다. NumPy 배열이 되면 matplotlib의 imshow 명령으로 볼 수 있다.

 

img_logo_array = np.array(img_logo_bmp)

plt.imshow(img_logo_array)
plt.axis("off")
plt.show()

 

반대로 NumPy 배열을 Image 객체로 바꿀 때는 fromarray 클래스 메서드를 사용한다.

 

Image.fromarray(img_logo_array)

 

이미지 크기 변환

 

이미지의 크기를 확대 또는 축소하려면 resize 메서드를 사용한다. 인수로는 새로운 사이즈의 튜플을 입력한다.

 

img_logo_png2 = img_logo_png.resize((300, 100))
img_logo_png2

 

썸네일 (thumbnail) 이미지를 만들고 싶다면 Image객체의 thumbnail 메서드를 사용한다. resize 메서드는 원래 객체는 그대로 유지한 채 변환된 이미지를 반환하지만 thumbnail 메서드는 원래 객체 자체를 바꾸는 인플레이스(in-place) 메소드이므로 주의하여 사용한다.

 

img_logo_thumbnail = img_logo_png.copy()
img_logo_thumbnail.thumbnail((150, 50))
img_logo_thumbnail

 

이미지 회전

 

이미지를 회전하기 위해서는 rotate 메서드를 호출한다. 인수로는 도 (degree) 단위의 각도를 입력한다. 입력 각도만큼 반시계 방향으로 회전한다.

 

img_logo_rotated = img_logo_png.rotate(45)
img_logo_rotated

 

이미지 잘라내기

 

crop 메서드를 사용하면 이미지에서 특정 부분 (ROI : region of interest)만 추출 할 수 있다. 인수로 ROI의 좌-상의 좌표, 우-하의 좌표를 받는다. 아래의 코드는 파이썬 로고이미지에서 파이썬의 마크만 잘라낸 것이다.

 

이미지 처리 기초 — 데이터 사이언스 스쿨

픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)라고 한다. 대표적인 색공간으로는 그레이스케일(gray scale), RGB(Red-Green-Blue), HSV(Hue-Saturation-Value) 방식이 있다. RGB RGB 색공간에서 색은 적(Red),

datascienceschool.net

 

728x90
반응형
LIST