역시 몇번을 해도 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 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한 라이브러리에서 들고오는 방식인듯.
이런 식으로 이미지를 출력하는데, 마지막에 주석처리된 부분을 주석 해제해도 상관이 없다.
굳이 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도 쓸 수 있긴 한데, 개인적으로 두번째 방법이 좋았던 게 이미지가 작게 나온다..(,,)
이 방법은 이미지 사이즈를 따로 조절해주지않으면 이미지 자체가 나와버림..
matplotlib처럼 여러개 한번에 보는 방법도 (있겠지만) 모르고...
여튼 이렇게 코드는 제일 짧다.
import PIL.Image as pil
img = pil.open(img_path)
img
이렇게 하면 원래 크기의 이미지가 두둥 하고 나온다. 생각해보니 openCV도 그랬던 것 같기도 하다..
이제 제발 잊어버리지 말기.