Suhwanc

 

오늘은 PIL(Python Image Library) 모듈을 사용하여 python에서 이미지를 다루어 보려고 한다.

 

1. 이미지 불러오기

먼저 이미지 파일(. png,. jpeg 등)이 필요한데, 나는 병아리 이미지(png 파일)를 가져왔다.

이 이미지의 크기는 256x128 이며 보통 [너비, 높이] 순서이다.

 

그럼 이제 python에서 이미지를 가져와보자.

1
2
3
4
from PIL import Image
 
image = Image.open("img.png")
image.show()
 

 

위 코드를 입력하고 실행하면 위와같은 사진이 열린다.

잘 불러왔다는것을 알 수 있다.

 

2. 이미지 array 변환

그럼 이 사진을 array로 바꿔보자.

numpy.asarray 함수로 이미지를 array로 바꿀 수 있고

array shape를 출력하면 아래와 같이 나오게 된다.

256x128 그대로 잘 나왔다!

참고로 뒤에 3은 RGB 3가지를 의미한다.

 

3. RGB 이미지 Gray이미지로 변환

보통 rgb이미지를 gray이미지로 변환할 때는 따로 공식이 존재한다.

 

r * 0.2989 + g * 0.5870 + b * 0.1140

 

이 공식을 적용하면 되는데

우린 이미 행렬로 변환시켜놓았기 때문에 간단하게 응용할 수 있다.

바로 코드를 보도록 하자.

 

아까 설명한 3번째 rgb index는 말 그대로 r, g, b 순서이기 때문에 그대로 곱해주면 된다.

 

위에서 등장한 Image.fromarray() 함수는 array를 다시 이미지로 변환시켜 주는 함수이다.

결과 사진을 보자.

 

깔끔하게 회색으로 변하였다!

 

4. 참고

아래는 공부하면서 이미지와 관련 없는 함수들을 몇 가지 적어보도록 하겠다.

 

  • numpy.stack(list) : 인자(parameter)로 리스트를 받으며, 리스트에 있는 값들을 모두 합쳐서 반환한다.

 

  • numpy.transpose(arr, tuple)

이 함수는 이전 포스팅에서도 다루었는데, 이번에는 두 번째 인자에 tuple이 있는 경우이다.

이 경우 tuple에 명시된 순서대로 배열의 순서가 바뀌어진다.