OpenCV Python - 滑鼠事件處理



OpenCV 可以使用回撥函式註冊各種與滑鼠相關的事件。這是為了根據滑鼠事件的型別啟動某個使用者定義的動作。

序號 滑鼠事件及描述
1

cv.EVENT_MOUSEMOVE

當滑鼠指標移動到視窗上時。

2

cv.EVENT_LBUTTONDOWN

指示左鍵被按下。

3

cv.EVENT_RBUTTONDOWN

指示右鍵被按下。

4

cv.EVENT_MBUTTONDOWN

指示中鍵被按下。

5

cv.EVENT_LBUTTONUP

當左鍵被釋放時。

6

cv.EVENT_RBUTTONUP

當右鍵被釋放時。

7

cv.EVENT_MBUTTONUP

指示中鍵被釋放。

8

cv.EVENT_LBUTTONDBLCLK

當左鍵雙擊時發生此事件。

9

cv.EVENT_RBUTTONDBLCLK

指示右鍵被雙擊。

10

cv.EVENT_MBUTTONDBLCLK

指示中鍵被雙擊。

11

cv.EVENT_MOUSEWHEEL

正數表示向前滾動,負數表示向後滾動。

要在滑鼠事件上觸發函式,必須藉助setMouseCallback()函式進行註冊。該命令如下所示:

cv2.setMouseCallback(window, callbak_function)

此函式將事件的型別和位置傳遞給回撥函式以進行進一步處理。

示例 1

以下程式碼在顯示影像作為背景的視窗上發生左鍵雙擊事件時繪製一個圓:

import numpy as np
import cv2 as cv
# mouse callback function
def drawfunction(event,x,y,flags,param):
   if event == cv.EVENT_LBUTTONDBLCLK:
      cv.circle(img,(x,y),20,(255,255,255),-1)
img = cv.imread('lena.jpg')
cv.namedWindow('image')
cv.setMouseCallback('image',drawfunction)
while(1):
   cv.imshow('image',img)
   key=cv.waitKey(1)
   if key == 27:
      break
cv.destroyAllWindows()

輸出

執行上述程式並在隨機位置雙擊。將會出現類似的輸出:

Mouse Events

示例 2

以下程式根據使用者輸入(1、2 或 3)互動式地繪製矩形、線或圓:

import numpy as np
import cv2 as cv
# mouse callback function

drawing=True
shape='r'

def draw_circle(event,x,y,flags,param):
   global x1,x2
   if event == cv.EVENT_LBUTTONDOWN:
      drawing = True
      x1,x2 = x,y
   elif event == cv.EVENT_LBUTTONUP:
      drawing = False
      if shape == 'r':
         cv.rectangle(img,(x1,x2),(x,y),(0,255,0),-1)
      if shape == 'l':
         cv.line(img,(x1,x2),(x,y),(255,255,255),3)
      if shape=='c':
         cv.circle(img,(x,y), 10, (255,255,0), -1)
img = cv.imread('lena.jpg')
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
   cv.imshow('image',img)
   key=cv.waitKey(1)
   if key==ord('1'):
      shape='r'
   if key==ord('2'):
      shape='l'
   if key==ord('3'):
      shape='c'

   #print (shape)
   if key == 27:
      break
   cv.destroyAllWindows()

如果按下“1”,則在視窗表面上,在滑鼠左鍵按下和彈起的座標之間繪製一個矩形。

如果使用者選擇 2,則使用座標作為端點繪製一條線。

選擇 3 繪製圓形時,它將在滑鼠彈起事件的座標處繪製。

成功執行上述程式後,輸出影像如下:

Mouse Event
廣告
© . All rights reserved.