[Python] pillow로 이미지 처리하기

2016. 5. 30. 11:55Programming/python

Deep learning에서 CNN은 학습하거나 TEST 하려는 이미지의 크기가 모두 동일해야 한다. 그래서 기존 crawling한 이미지들의 크기 규격을 맞춰줘야 할 필요가 있다.

이게 단순히 crop을 하면 이미지 개체 인식에 side-effect가 발생할 여지가 있고, 또 무작정 해당 사이즈로 resizing을 하기엔 이미지 비율이 깨지는 문제가 발생했다.


이를 해결하기 위해서는 해당 비율에 맞게 해당 크기로 resizing하는 기술이 필요하다.


이를 위해 pillow라는 python package를 사용해 보기로 했다.


설치는 아래와 같이 간단하다.


$> pip install pillow


pillow의 설치가 완료되었으면 이제 import 해서 이미지 처리 작업을 해보자.


내가 하고자 하는 방법은


1. image를 256 x 256 사이즈로 줄인다. (배율에 맞춰서 줄이기 때문에 가로 혹은 세로가 256이 안될 수도 있다.)

2. 256 x 256이 안되는 이미지는 이미지 중간에 위치한 다음에 나머지 픽셀들은 흰색 바탕으로 표현해서 256 x 256으로 만든다.




간략하게 소스 설명을 하자면, 파이썬 실행 시 해당 argument에 해당하는 file path를 iterator로 돌려서 해당 폴더 안에 있는 모든 이미지 파일을 가져온다. (os.walk) 


1. 256x256의 새 이미지를 생성하고 (new_img = Image.new("RGB", (256,256), "white")

2. 기존 이미지를 연 후 256x256으로 변경한다. ( im.thumbnail(size, Image.ANTIALIAS)

3. 변경된 이미지를 가운데로 맞추기 위해 해당 offset을 찾고, (i_offset, j_offset)

4. 기존 이미지를 새 이미지에 offset에 해당 하는 위치로 대입한다.

5. 마지막으로 JPG, PNG 여부에 따라 이미지 파일을 저장한다.