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.png') # 이미지 크기 출력 print(im.size) # 이미지 JPG로 저장 im.save('python.jpg')
큰 이미지 파일의 Thumbnail 이미지를 만들기 위해서는 Image 객체에서 thumbnail() 메서드를 호출하면 된다. 예를 들어, Thumbnail 이미지를 최대 64 x 64 크기로 만들고 싶으면 아래와 같이 thumbnail(크기) 메서드를 호출한다.
from PIL import Image im = Image.open('python.png') # Thumbnail 이미지 생성 size = (64, 64) im.thumbnail(size) im.save('python-thumb.jpg')
3. 이미지 부분 잘라내기
이미지의 일부를 잘라내는 것을 Cropping 이라 부르는데, 이미지 객체에서 crop() 메서드를 사용하여 일부 영역을 잘라내는데, crop() 메서드에서 리턴된 이미지는 부분 이미지로서 이를 저장하면 잘라낸 이미지만 저장된다. crop()의 파라미터는 (좌, 상, 우, 하) 위치를 갖는 튜플로 지정한다.
from PIL import Image im = Image.open('python.png') cropImage = im.crop((100, 100, 150, 150)) cropImage.save('python-crop.jpg')
Image 클래스에서는 crop() 이외에도 이미지를 복사하는 copy(), 이를 붙여넣는 paste() 등의 유용한 메서드들이 있다.
4. 이미지 회전 및 Resize
이미지를 회전하기 위해서는 이미지 객체에서 rotate(회전각도) 메서드를 호출하면 된다. 또한, 이미지의 크기를 확대/축소하기 위해서는 이미지 객체에서 resize(크기튜플) 메서드를 호출한다.
from PIL import Image im = Image.open('python.png') # 크기를 600x600 으로 img2 = im.resize((600, 600)) img2.save('python-600.jpg') # 90도 회전 img3 = im.rotate(90) img3.save('python-rotate.jpg')
5. 이미지 필터링
Pillow 패키지는 이미지를 필터링하기 위한 여러 기본적인 필터들을 제공하고 있다. 이미지 필터를 위해서는 이미지 객체에서 filter(필터종류) 메서드를 호출하면 되는데, 필터종류는 ImageFilter 모듈을 import 하여 지정한다. 예를 들어, Blur 이미지를 위해서는 ImageFilter.BLUR 를 사용하고, 윤곽만 표시하기 위해서는 ImageFilter.CONTOUR 를 사용한다.
from PIL import Image, ImageFilter im = Image.open('python.png') blurImage = im.filter(ImageFilter.BLUR) blurImage.save('python-blur.png')