정보공간_1

[6기 부산 정희록] Pillow #1 본문

IT 놀이터/Elite Member Tech & Talk

[6기 부산 정희록] Pillow #1

알 수 없는 사용자 2014. 10. 8. 18:34

이번시간에는 PIL 이라는 Python Image Library에 대해 설명을 가질려고 했으나, PIL보다는 현재 추세에 맞게 Pillow에 대한 설명으로 대신하겠습니다. 프로그래밍이라는 것이 원시적인 수준으로 직접 구현하려고 하면 굉장히 많은 지식과 엄청난 삽질, 복잡하고 어렵지만 대부분의 원하는 수준의 프로그래밍은 이미 나와있는 라이브러리를 잘 쓰면 간단하게 해결되는 부분이 많으므로 어떤 목적을 위해서 혹은 Prototype으로 간단하게 만들 목적이라면 어떤 라이브러리를 사용해야 하는지를 먼저 알아내는 것이 중요합니다.!!!

Pillow는 PIL 프로젝트에서 fork되어서 나온 라이브러리입니다. PIL 프로젝트는 2009년 11월을 마지막으로 1.1.7버전을 Release하고 더이상 업데이트가 진행되지 않고 있습니다. 현재 시점이 2014년 10월인 점을 감안하면 근 4년동안 업데이트가 되지 않고 있는데 여전히 많은 사람들이 PIL을 사용하고 있습니다. PIL이 그만큼 완벽한 라이브러리이며 굉장히 많은곳에서 쓰이고 있다는 증거인데요.. 하지만 PIL은 Python 3를 지원하지 않기 때문에 Python 3를 지원하기 위해 Pillow라는 파생 라이브러리가 생기게 되었습니다.


Pillow is the "friendly" PIL fork 라는 구문에서 알 수 있듯이 PIL의 메서드를 그대로 사용할 수 있습니다. 현재 공식적인 Pillow Reference는 있지만 참고할 만한 많은 예제가 없으므로 PIL tutorial이나 document를 보시면 그대로 Pillow에서 적용이 가능합니다.

PIL 설치도 또한 간단합니다. 앞서 설명드린 Beautiful Soup #1 에서 Beautiful Soup 설치법을 참고하시어 pip나 easy_install 을 이용해서 간단하게 설치가 가능합니다.

>> pip install Pillow
>> easy_install Pillow

둘 중 아무방법이나 선택하셔서 설치를 하시면 됩니다. 윈도우에서는 Pillow 단일 모듈만 설치하면 되지만 Ubuntu나 Debian 계열의 Raspian Wheezy(라즈베리파이 OS) 계열에서는 Pillow 모듈을 사용하기 위해서는 특정 패키지가 필요합니다.

sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5dev python-tk

위 명령어를 통해 필요한 패키지를 설치하고 나서 pip나 easy_install을 통해 우리가 필요한 모듈 Pillow 를 설치하면 됩니다.

Pillow 설치가 끝나면 PIL 패키지를 사용할 수 있습니다. PIL모듈의 유지보수성을 위해서 Pillow도 PIL 네임스페이스를 사용합니다. Image라는 전역 네임스페이스가 존재하므로 반드시 PIL내에 있는 Image만 사용하게 다음과 같이 import합니다.

from PIL import Image



 참고로 현재 Pillow의 최신 버전은 2.6.0 으로 확인을 하였고, PIL은 2009년 11월 이후로 더이상 업데이트가 되고 있지 않습니다. 본론으로 들어가서 간단하게 image파일의 포맷, image파일의 width와 height, image파일의 색상컬러를 알아보겠습니다.


 위 화면을 보시면 Image 객체를 통해 "logo.png"라는 파일을 읽어온 후, 그 이미지 객체의 포맷(bmp, jpeg, png, gif)과 객체의 width, height 정보 그리고 RGB, RGBA, YMCK, Gray 등의 색상컬러 정보를 각각의 객체 멤버변수를 통해 출력한 예제입니다. Image객체를 통해 open을 하게되면 Pillow의 Image모듈이 알아서 헤더를 분석하여 쉽게 이미지파일의 정보를 불러올 수 있습니다. 실제 이미지는 아래 그림입니다.


 위의 그림을 resize하여 정사각형 형태로 만들어 보겠습니다. 실제 위의 사진은 앞서 보신 결과대로 311 x 101 의 그림인데, Pillow의 Image 모듈을 통해서 간편하게 크기를 조절해보겠습니다.


 파이썬의 특징은 정말 필요한 함수만 호출하면 되기 때문에 코드가 굉장히 간결하게 나온다는 특징이 있습니다. 물론 라이브러리의 도움을 받아서 이런 코드가 나오겠지만 타 언어에 비해서 문법이나 사용법이 사용하기 쉽게 되어 있습니다.


 실제 결과입니다. 정사각형 모양으로 이미지가 처리가 됩니다. 이 실제 이미지를 다시 원래 사이즈인 311 X 101 크기로 한번 변경해 보겠습니다. PIL의 Image 모듈이 지원하는 보간법은 총 4가지가 있는데 그 종류는 아래와 같습니다.
NONE = 0
NEAREST = 0
ANTIALIAS = 1
LINEAR = BILINEAR = 2
CUBIC = BICUBIC = 3

들어가는 값이 0~3 까지 총 4가지의 경우가 있고, resample filters의 값을 변경해서 이미지를 늘리면 아래와 같습니다.

Image.ANTIALIAS

Image.NEAREST

Image.BICUBIC



먼저 코드를 보여드리고 설명을 계속하겠습니다.

NEAREST는 확실히 왜곡이 심하게 일어난 이미지이고, ANTIALIAS는 부드럽지만 조금은 연하지만, 포토샵의 손으로 문지른 효과처럼 약간은 번짐이 보이는 이미지이고, BICUBIC이 가장 선명한걸 확인할 수 있습니다.

Pillow 라이브러이에 대한 소개와 간단한 예제를 이번시간에 소개하는 시간을 가졌습니다. 다음 시간에는 실제로 영상처리에서 많이 쓰이는 Crop, Transpose, Filter에 대한 소개 및 예제를 통해서 Pillow 라이브러리 사용법에 대해 설명을 이어 나가겠습니다.