[OpenCV]マウス


マウスを使用して画像を注釈する


OpenCVにはマウスイベント検出機能があり、左ボタンや右ボタンなど、マウスの各種動作を検出することができます.まず、マウスを使用して画像に長方形をレンダリングします.

  • マウスイベントを使用して左クリック位置の情報を保存し、マウスイベントを解放したときに再び位置を保存して長方形を描画します.

  • whileループを使用して、ユーザーはqキー(ASCIIコード:113)を押して、アプリケーションスクリプトを終了するまで画像を表示し続けます.ユーザーがループを終了すると、ウィンドウが破壊されます.
  • cキー(ASCIIコード:99)を押して、ウィンドウ内の画像を元の画像を読み込むときに作成したコピーにリセットし、ユーザーが以前のコメントをすべてクリアできるようにします.
  • 画像に長方形のコールバック関数を描画する


    コード#コード#

    import cv2
    
    # 사각형 그리는데 사용하는 두 개의 점 저장할 리스트
    top_left_corner = []
    bottom_right_corner = []
    
    def drawRectangle(action, x, y, flags, *userdata):
      # 전역 변수 참조
      global top_left_corner, bottom_right_corner
      
      # 왼쪽 마우스 버튼을 눌렀을 때 왼쪽 상단 모서리 리스트에 현재 위치 저장
      if action == cv2.EVENT_LBUTTONDOWN:
        top_left_corner = [(x,y)]
        
      # 마우스 왼쪽 버튼을 놓으면 오른쪽 아래 모서리 리스트에 현재 위치 저장
      elif action == cv2.EVENT_LBUTTONUP:
        bottom_right_corner = [(x, y)]    
        
        # 사각형 그리기
        cv2.rectangle(image, top_left_corner[0], bottom_right_corner[0], (0,255,0),2,8)
        cv2.imshow("Window", image)

    setMouseCallback()

    setMouseCallback(winname, onMouse, userdata)
  • winname:ウィンドウ名
  • onMouse:マウスイベントのコールバック機能
  • userdata:コールバックのオプションパラメータ
  • コード#コード#

    # 이미지 읽기
    image = cv2.imread("../Input/sample.jpg")
    
    # 그린걸 지우는 데 유용하게 임시 이미지를 만들기
    temp = image.copy()
    
    # 이름있는 창 만들기
    cv2.namedWindow("Window")
    
    # 마우스 이벤트가 발생할 때 호출되는 GUI 기능
    cv2.setMouseCallback("Window", drawRectangle)

    重要なイベント

    qキーを押してウィンドウを閉じ、cキーを押して描画された長方形を初期化します.

    コード#コード#

    k = 0
    while k != 113:
      cv2.imshow("Window", image)
      k = cv2.waitKey(0)
      if k == 99:
        image = temp.copy()
        cv2.imshow("Window", image)
    cv2.destroyAllWindows()

    結果