PythonとOpenCVで画像処理④【マウスイベント】
*OpenCVのバージョンは2.4.1です
【元の画像】
*Raspberry Piのカメラで撮影したのでサイズが大きめです
【マウスイベント】
- setMouseCallback関数を使えばマウスイベント時の処理をセットできる
- cv2.setMouseCallback(画像, 関数名, 関数に渡すパラメータ)
- マウスイベントが起こったとき、指定した関数に5つの引数が渡される
- event:マウスイベントの種類
- x:マウスイベントが起きたx座標
- y:マウスイベントが起きたy座標
- flags:マウスイベント時に押されていたボタンやキーの種類
- param:setMouseCallbackの第三引数で設定したパラメータ
- マウスイベントの種類
- cv2.EVENT_MOUSEMOVE:マウスが移動した
- cv2.EVENT_LBUTTONDOWN:マウスの左ボタンが押された
- cv2.EVENT_RBUTTONDOWN:マウスの右ボタンが押された
- cv2.EVENT_MBUTTONDOWN:マウスの中ボタンが押された
- cv2.EVENT_LBUTTONUP:マウスの左ボタンを離した
- cv2.EVENT_RBUTTONUP:マウスの右ボタンを離した
- cv2.EVENT_MBUTTONUP:マウスの中ボタンを離した
- cv2.EVENT_LBUTTONDBCLK:マウスの左ボタンがダブルクリックされた
- cv2.EVENT_RBUTTONDBCLK:マウスの右ボタンがダブルクリックされた
- cv2.EVENT_MBUTTONDBCLK:マウスの中ボタンがダブルクリックされた
- マウスイベント時に押されていたボタンやキーの種類
- cv2.EVENT_FLAG_LBUTTON:マウスの左ボタン
- cv2.EVENT_FLAG_RBUTTON:マウスの右ボタン
- cv2.EVENT_FLAG_MBUTTON:マウスの中ボタン
- cv2.EVENT_FLAG_CTRLKEY:Ctrlキー
- cv2.EVENT_FLAG_SHIFTKEY:Shiftキー
- cv2.EVENT_FLAG_ALTKEY:Altキー
【マウスイベントを使って図形やテキストを描画】
- 左クリック:赤い円形を生成
- 右クリック:青い四角形を生成
- 右クリック+Shiftキー:緑色のテキストを生成
# -*- coding: utf-8 -*- import cv2 # マウスイベント時に処理を行う def mouse_event(event, x, y, flags, param): # 左クリックで赤い円形を生成 if event == cv2.EVENT_LBUTTONUP: cv2.circle(img, (x, y), 50, (0, 0, 255), -1) # 右クリック + Shiftキーで緑色のテキストを生成 elif event == cv2.EVENT_RBUTTONUP and flags & cv2.EVENT_FLAG_SHIFTKEY: cv2.putText(img, "CLICK!!", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 5, (0, 255, 0), 3, cv2.CV_AA) # 右クリックのみで青い四角形を生成 elif event == cv2.EVENT_RBUTTONUP: cv2.rectangle(img, (x-100, y-100), (x+100, y+100), (255, 0, 0), -1) # 画像の読み込み img = cv2.imread("test.jpg", 1) # ウィンドウのサイズを変更可能にする cv2.namedWindow("img", cv2.WINDOW_NORMAL) # マウスイベント時に関数mouse_eventの処理を行う cv2.setMouseCallback("img", mouse_event) # 「Q」が押されるまで画像を表示する while (True): cv2.imshow("img", img) if cv2.waitKey(1) & 0xFF == ord("q"): break cv2.destroyAllWindows()
【処理結果】
【参考】
Mouse as a Paint-Brush — OpenCV-Python Tutorials 1 documentation
opencv.jp - OpenCV: シンプルGUI(Simple GUI)サンプルコード -
opencv メモ - 五流!!日曜プログラマーのつどい