python初心者です。よろしくお願いします。
google colaboratory のpython3でOpenCVを用いた画像処理で
マウスイベントを扱う方法についてお伺いしたいです。
下記のリンクのように、"OpenCVで取得した画像を左クリックすると任意の座標に図形を生成する"
など、マウスの操作と座標を条件としたプログラムを作成したいです。
python3
1# -*- coding: utf-8 -*- 2import cv2 3 4# マウスイベント時に処理を行う 5def mouse_event(event, x, y, flags, param): 6 7 # 左クリックで赤い円形を生成 8 if event == cv2.EVENT_LBUTTONUP: 9 cv2.circle(img, (x, y), 50, (0, 0, 255), -1) 10 11 # 右クリック + Shiftキーで緑色のテキストを生成 12 elif event == cv2.EVENT_RBUTTONUP and flags & cv2.EVENT_FLAG_SHIFTKEY: 13 cv2.putText(img, "CLICK!!", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 5, (0, 255, 0), 3, cv2.CV_AA) 14 15 # 右クリックのみで青い四角形を生成 16 elif event == cv2.EVENT_RBUTTONUP: 17 cv2.rectangle(img, (x-100, y-100), (x+100, y+100), (255, 0, 0), -1) 18 19 20# 画像の読み込み 21img = cv2.imread("test.jpg", 1) 22# ウィンドウのサイズを変更可能にする 23cv2.namedWindow("img", cv2.WINDOW_NORMAL) 24# マウスイベント時に関数mouse_eventの処理を行う 25cv2.setMouseCallback("img", mouse_event) 26 27# 「Q」が押されるまで画像を表示する 28while (True): 29 cv2.imshow("img", img) 30 if cv2.waitKey(1) & 0xFF == ord("q"): 31 break 32 33cv2.destroyAllWindows()
しかし、上記のリンクのソースをgoogle colaboratoryで実行すると
"ランタイムが異常終了しました"というエラーが表示されました。
原因を調査したところ、google colaboratoryは出力結果を別の窓に表示することができず、
画像処理はインラインで処理するしかないようです。
画像の出力自体はcv2.imshowをmatplotlibに置き換えることで可能なのですが、
cv2.setMouseCallback関数などマウスイベントを呼び出す時に窓の名前を指定する必要があるようです。
なのにgoogle colaboratoryは別窓が開けない、という問題が解決できません。
お聞きしたい内容としては、インラインで上記のようなマウスイベントを呼び出す方法になります。
長文・乱文になってしまい申し訳ありません。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/15 11:46
2018/11/15 12:09