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의 좌-상의 좌표, 우-하의 좌표를 받는다. 아래의 코드는 파이썬 로고이미지에서 파이썬의 마크만 잘라낸 것이다.
img_logo_cropped = img_logo_png.crop((10, 10, 200, 200))
img_logo_cropped
'AI-driven Methodology > CV (Computer Vision)' 카테고리의 다른 글
[Computer Vision] 이미지 컨투어 (0) | 2022.06.13 |
---|---|
[Computer Vision] Scikit-Image (0) | 2022.06.13 |
[Computer Vision] 이미지 파일 형식 (0) | 2022.06.13 |
[Computer Vision] 색 공간 (Color Space) (0) | 2022.06.12 |
[Computer Vision] 이미지 처리 (0) | 2021.12.30 |