오늘은 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에 명시된 순서대로 배열의 순서가 바뀌어진다.
'Artificial Intelligence' 카테고리의 다른 글
[numpy] 5주차 PageRank algorithm in numpy (2) | 2020.04.16 |
---|---|
[numpy] 5주차 eigen vector, value (0) | 2020.04.15 |
[numpy] 4주차 gram-schmidt, reflection matrix (2) | 2020.04.09 |
[numpy] 3주차 transform, determinant (0) | 2020.03.25 |
[numpy] 2주차 기본 행렬 연산과 인덱싱 (1) | 2020.03.23 |