🟩

TIL: matplotlib.pyplot.imshow()로 Grayscale 이미지를 보면 초록색으로 뜰 때

Date
2020/10/31
Tags
TIL
Python
Comp. Vision
Created by

흑백으로 안 변하고 왜 초록색으로 뜨지

원본 이미지를 먼저 RGB로 바꾸어주었고, RGB2GRAY를 적용하였다.
cv2.imread()로 불러온 이미지를 Grayscale로 변환하기 위해 다음과 같은 코드를 작성했다.
image = cv2.imread('./arisu_mia.JPG') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) plt.imshow(gray) plt.show()
Python
복사
정상 출력을 위해 먼저 BGR를 RGB로 변환했고, 그레이스케일 이미지를 위해 RGB2GRAY를 적용했다. 결과는 위 사진과 같이 녹색 사진만 나올 뿐이었다.

이미지 출력을 잘못 하고 있었던 것

Grayscale 변환은 제대로 완료된 것이 맞다. 다만, 출력을 제대로 안 하고 있었던 것이다.
Grayscale image는 알다시피 단일 채널 이미지이다. 실제로 원본 이미지와 Grayscale 변환한 이미지의 shape를 찍어 보면 다음과 같다.
print(image.shape) # (500, 666, 3) print(gray.shape) # (500, 666)
Python
복사
하지만, 단일 채널 이미지를 어느 색상 채널에 매핑해서 출력할지는 matplotlib.pyplot.imshow()의 마음이다. 따라서 이미지를 의도한 대로 출력하기 위해서는 Colormap을 지정해주어야 한다.

matplotlib의 Colormap

matplotlib의 color map 목록
matplotlib.pyplot.imshow()에는 인자로 cmap이 존재하고, 이를 통해 출력 컬러맵을 설정할 수 있다. 인자를 지정해주지 않는다면 기본으로 rcParams["image.cmap"]이 들어가고, 이는 보통 viridis 컬러맵이 된다.
실제로 인자로 cmap='viridis'를 주면 위에서 출력된 것과 같이 초록색으로 뜬 이미지가 출력되는 걸 볼 수 있다.

해결

인자로 cmap='gray'를 주면 정상적으로 회색 이미지가 출력된다.

References