아미(아름다운미소)

파이썬 이미지 처리(Pillow) 본문

랭귀지/python

파이썬 이미지 처리(Pillow)

유키공 2018. 1. 3. 13:30

1. 파이썬에서의 이미지 처리

파이썬에서 이미지를 처리하고 핸들링하기 위해서는 Pillow, OpenCV, PIL 등의 외부 패키지를 설치해서 사용합니다. 여기서는 PIL로부터 계승되어 많이 사용되는 Pillow 패키지를 사용합니다. Pillow는 pip을 통해 아래와 같이 설치합니다.

pip install Pillow

Pillow는 파이썬 이미징 라이브러리로서 여러 이미지 파일 포맷을 지원하고, 이미지 내부 데이타를 엑세스할 수 있게 하며, 다양한 이미지 처리 기능을 제공하고 있습니다. 예를 들어, 이 패키지를 사용하면, 이미지로부터 Thumbnail 이미지를 만들다거나 다른 이미지 포맷으로 변환할 수 있고 이미지를 프린트하는 일들을 할 수 있습니다. 또한, 이미지 크기를 변형하거나 회전 및 Transform, 그리고 필터링 등 다양한 이미지 프로세싱 작업들을 할 수 있습니다.

2. 이미지 파일 읽고 쓰기

Pillow 패키지에서 가장 중요한 클래스는 이미지를 표현하는 Image 클래스입니다. Image.open() 메서드는 기존 이미지 파일을 열 때 사용하고, Image.new() 메서드는 새로운 이미지 파일을 생성할 때 사용하며, Image.save() 메서드는 이미지 파일을 저장할 때 사용합니다. Image.open() 로부터 리턴된 이미지 객체의 size 속성은 이미지의 크기를 리턴합니다. 아래 예제는 한 이미지 파일을 열어 크기를 출력한 후, 다른 포맷의 이미지 파일로 저장하는 예입니다. (아래 예와 같이 설치시에는 Pillow 패키지를 설치하지만, import 시에는 "import PIL"과 같이 PIL을 사용합니다.)

from PIL import Image
 
# 이미지 열기
im = Image.open('python_logo.png')
 
# 이미지 크기 출력
print(im.size)
 
# 이미지 JPG로 저장
im.save('python_logo.jpg')

큰 이미지 파일의 Thumbnail 이미지를 만들기 위해서는 Image 객체에서 thumbnail() 메서드를 호출하면 됩니다. 예를 들어, Thumbnail 이미지를 최대 64 x 64 크기로 만들고 싶으면 아래와 같이 thumbnail(크기) 메서드를 호출합니다.

from PIL import Image
 
im = Image.open('python_logo.png')
 
# Thumbnail 이미지 생성
size = (64, 64)
im.thumbnail(size)  
 
im.save('python_logo_thumb.jpg')

3. 이미지 부분 잘라내기

이미지의 일부를 잘라내는 것을 Cropping 이라 부르는데, 이미지 객체에서 crop() 메서드를 사용하여 일부 영역을 잘라내는데, crop() 메서드에서 리턴된 이미지는 부분 이미지로서 이를 저장하면 잘라낸 이미지만 저장됩니다. crop()의 파라미터는 (좌, 상, 우, 하) 위치를 갖는 튜플로 지정합니다.

from PIL import Image
im = Image.open('python_logo.png')
cropImage = im.crop((100, 100, 150, 150))
cropImage.save('python_logo_crop.jpg')

Image 클래스에서는 crop() 이외에도 이미지를 복사하는 copy(), 이를 붙여넣는 paste() 등의 유용한 메서드들이 있습니다.

4. 이미지 회전 및 Resize

이미지를 회전하기 위해서는 이미지 객체에서 rotate(회전각도) 메서드를 호출하면 됩니다. 또한, 이미지의 크기를 확대/축소하기 위해서는 이미지 객체에서 resize(크기튜플) 메서드를 호출합니다.

from PIL import Image
im = Image.open('python_logo.png')
 
# 크기를 600x600 으로
img2 = im.resize((600, 600))
img2.save('python_logo_600.jpg')
 
# 90도 회전
img3 = im.rotate(90)
img3.save('python_logo_rotate.jpg')

5. 이미지 필터링

Pillow 패키지는 이미지를 필터링하기 위한 여러 기본적인 필터들을 제공하고 있습니다. 이미지 필터를 위해서는 이미지 객체에서 filter(필터종류) 메서드를 호출하면 되는데, 필터종류는 ImageFilter 모듈을 import 하여 지정합니다. 예를 들어, Blur 이미지를 위해서는 ImageFilter.BLUR 를 사용하고, 윤곽만 표시하기 위해서는 ImageFilter.CONTOUR 를 사용합니다.

from PIL import Image, ImageFilter
 
im = Image.open('python_logo.png')
blurImage = im.filter(ImageFilter.BLUR)
 
blurImage.save('python_logo_blur.png')
Comments