본문 바로가기

코딩/파이썬

colab 파이썬 opencv와 matplot 이미지 출력 차이 해결하기

테스트 툴 : colab

http://colab.research.google.com

 

상황!

파이썬으로 간단하게 사진을 grayscale 처리하여 확인하려고 하였으나, image를 확인했을 때 원본이미지와 다른 결과가 나오는 현상이 발생함. 컴퓨터에 파이썬 개발 환경을 구축하지 않아서, 간단하게 colab을 활용하였음. 쓰니는 파이썬을 처음 해보는 상황이기 때문에 여러 블로그를 참고하였음. (다른 블로그 작성자 분들 감사합니다. 첨부에 달아놓았어요!)

 

[1]에서 나와있는대로 grayscale을 진행하려고 하였으나 사진의 grayscale이 원하는 대로 나오지 않음

 


#1 업로드한 사진 이미지([1]에 예시로 있는 이미지 사용했음)의 색깔이 원래 이미지와 다르게 나옴.

(좌) 업로드 이미지 / (우) imshow를 하지 않았을 때 이미지

(우) 이미지가 나온 코드 ▼

 

##code 1

import cv2
import matplotlib.pyplot as plt
src=cv2.imread(path, cv2.IMREAD_COLOR)
plt.imshow(src)
 
colab에서 cv2.imshow가 되지 않아서, matplot을 이용하여 imshow를 진행하였음.

※ 원인

openCV를 통해서 이미지를 읽으면 기본적으로 BGR로 데이터를 저장함 [3] [4]

matplot은 이와 달리 RGB가 기본이기 때문에 위에 문제가 발생됨.

 


위에서 알게된 내용을 확인하고자 아래의 code2을 돌려봄

CV가 BGR로 읽기 때문에, 원래 사진을 다시 보기 위해서 RGB로 변환 (cvtColor)

 

##code 2

img=cv2.imread(path)
img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

 

code 2의 결과값


 

#2. grayscale을 적용했을 때 사진이 원하는 결과가 나오지 않았음. (#1과 같은 원인)

 

#1에서는 BGR을 RGB로 출력하다보니 문제가 발생

#2에서는 GRAY로 바꾸어줘서 RGB 값이 하나로 묶어졌을 줄 알았으나

matplot을 이용하다보니, RGB / BGR 사이에서 문제가 다시 발생한 것으로 확인함.

 

##code 3

dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(dst)

 

code 4의 결과

#2는 다른 포스팅에서 다룰 예정!

 


#3 colab에서는 cv2.imshow가 작동하지 않음

계속해서 찾다보니 본질적인 문제였던, colab에서 cv2.imshow를 대체할 수 있는 방법을 찾아냄.

 

##code 4

import cv2
from google.colab.patches import cv2_imshow

 

 

아래 적힌 줄을 추가하여 colab에서 imshow를 그대로 적용할 수 있게됨.

 

colab에서 cv2.imshow가 되지 않아서 plt.imshow로 적용했을 때 그림의 색 스케일이 다르게 되는 문제는 cv2_imshow로 바꾸면서 간단히 해결됨. 

 


참고

[1] 076923.github.io/posts/Python-opencv-10/    Python OpenCV 강좌 : 제 10강 - 그레이스케일

[2] wikidocs.net/62261

[3] opencv-python.readthedocs.io/en/latest/doc/01.imageStart/imageStart.html

[4] www.pyimagesearch.com/2014/11/03/display-matplotlib-rgb-image/

'코딩 > 파이썬' 카테고리의 다른 글

[에러] torchvision - from PIL import Image Error  (0) 2022.11.29
Pytorch 설치 (Anaconda, Window)  (1) 2022.11.28