LoginSignup
36
22

More than 1 year has passed since last update.

Google Colaboratoryでcv2.imshowを擬似的に利用する方法

Last updated at Posted at 2019-04-02

画像処理100本ノックを「Google Colaboratory」で楽々学習を利用して、画像処理100本ノックをやってみようということでColabを起動してTutorialの通りに打ち込んでみました。

import cv2
img  = cv2.imread("imori.jpg")
cv2.imshow("imori", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

普通ならこれで画像が出るところですが、エラーが発生します。

---------------------------------------------------------------------------
DisabledFunctionError                     Traceback (most recent call last)
<ipython-input-14-d690a3c68444> in <module>()
----> 1 cv2.imshow("imori", img)

/usr/local/lib/python3.6/dist-packages/google/colab/_import_hooks/_cv2.py in wrapped(*args, **kwargs)
     50   def wrapped(*args, **kwargs):
     51     if not os.environ.get(env_var, False):
---> 52       raise DisabledFunctionError(message, name or func.__name__)
     53     return func(*args, **kwargs)
     54 

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

エラーメッセージを読んでみるとcv2.imshow()はjupyterセッションをクラッシュしてしまうそう。
ありがたいことにColab側がサポートパッチを提供してくれているので、これを使って解決させてみます。

#サポートパッチのインポート
from google.colab.patches import cv2_imshow

#画像のインポート
!curl -o logo.png https://colab.research.google.com/img/colab_favicon_256px.png
import cv2
img = cv2.imread('logo.png', cv2.IMREAD_UNCHANGED)
cv2_imshow(img)

僕の場合はimori.jpgcv2.imread()で読み込んで、これで無事にイモリが表示されました。

スクリーンショット 2019-04-02 20.49.47.png

ただこれはColabのパッチを使ってるのでもちろんJupyter Notebookではうまく動きません。
Jupyter Notebookは表示まではされるんですが,そもそもcv2.waitKey(0)がうまく作動しなくてKernelごと死んじゃいます。

=============================================

2020/09/20 追記

Jupyterでは自前でimshow関数を用意してくれているようですので、こちらを参照されると良いかもしれません。

36
22
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
22