Colab 이미지 데이터 출력하는 방법

1

Deep-Learning

목록 보기
3/4
post-custom-banner

역시 몇번을 해도 colab에서 이미지 출력하는 코드만은 나의 것이 되질 않는다.
openCV나 PIL같은 편리한 툴들이 많은데도, 이미지를 그냥 보는 거 그거 하나가 잘 안외워지는 걸 보면 진짜 쓸데없는 건 기억하고 쓸데있는 건 기억 못하는 스타일임이 틀림이 없다 ;ㅅ;

여튼 그래서 오늘은 google colab에서 이미지 데이터 보는 법을 정리해 보려고 한다.

하루 이틀 당하는 게 아닌데 매번 나도 모르게 무지성으로 쳤다가 뜨는 에러

DisabledFunctionError: cv2.imshow() is disabled in Colab, because it causes Jupyter sessions to crash; see https://github.com/jupyter/notebook/issues/3935.
As a substitution, consider using from google.colab.patches import cv2_imshow

waitkey만 넣어주면 실행되어야 하는 코드.. 아무래도 openCV 자체로 imshow를 했을 때는 브라우저로 보여주는 방식인 것 같다. (찾아보니 브라우저 설정하는 파라미터?도 존재하는듯) 코랩에서는 브라우저로 보여줄 수 없으니 당연히 불가능한 것.
그래서 프로젝트할 때는 matplotlib을 이용했었다.

여기서는 cv2, matplotlib, PIL 세가지 다 정리해보고자 한다.



cv2 이용해서 이미지 출력하기

에러의 아랫부분을 읽어보니 코랩에서도 자체적으로 cv2 imread를 할 수 있는 라이브러리를 만든 모양이다. 당연 그래야 할 것.. opencv는 워낙 ,, 그러하니

여튼 그래서 저걸 임포트해준다.

참고로 이미지 데이터는 kaggle Whale-and-Dolphin Identification Competition에서 가지고 온 데이터이다. 진행중이어서 아무거나 끌고오다보니 이 이미지를 예시로 쓰게 됐다.

여담으로 진짜 귀여운 게 데이터 셋 이름이 Happy-whale-and-dolphin임 ㅠ 
넘나 기여워

아무튼, 다음의 코드를 실행하면 된다.

import cv2
from google.colab.patches import cv2_imshow

img_path = '[경로 설정]'

img = cv2.imread(img_path)
cv2_imshow(img)

imread는 그대로 하고 show를 patch한 라이브러리에서 들고오는 방식인듯.



Matplotlib을 이용해서 이미지 출력하기

이런 식으로 이미지를 출력하는데, 마지막에 주석처리된 부분을 주석 해제해도 상관이 없다.
굳이 plt.show()를 쓰지 않아도 그래프(이미지)를 출력해주기때문에...

여튼 저런 식으로도 불러올 수 있는데 나는 저 눈금(?)때문에 썩 좋아하진 않았다. 플젝할때도 지금도 데린이기때문에.. ^^


++ 추가

방금 생각난김에 시도해봤는데 작동하는구나~ 얼씨구~~ 🤓
이미지 축을 없애는 코드도 추가해보았다.

from PIL import Image
import matplotlib.pyplot as plt

frm = plt.gca()

img = Image.open(img_path)
frm.imshow(img)

frm.axes.get_xaxis().set_visible(False)
frm.axes.get_yaxis().set_visible(False)


PIL을 이용해서 이미지 출력하기

PIL도 쓸 수 있긴 한데, 개인적으로 두번째 방법이 좋았던 게 이미지가 작게 나온다..(,,)

이 방법은 이미지 사이즈를 따로 조절해주지않으면 이미지 자체가 나와버림..
matplotlib처럼 여러개 한번에 보는 방법도 (있겠지만) 모르고...

여튼 이렇게 코드는 제일 짧다.

import PIL.Image as pil

img = pil.open(img_path)
img

이렇게 하면 원래 크기의 이미지가 두둥 하고 나온다. 생각해보니 openCV도 그랬던 것 같기도 하다..


이제 제발 잊어버리지 말기.

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..
post-custom-banner

0개의 댓글