【opencv系列05】OpenCV4.X鼠标回调函数
點擊上方“AI搞事情”關注我們
一、回調函數
setMouseCallback(windowName, onMouse, param=None)
windowName:窗口名稱
onMouse:鼠標響應處理函數
鼠標回調函數,該函數在鼠標事件發生時被調用。鼠標事件可以是與鼠標相關的任何操作,如左鍵向下,左鍵向上,左鍵雙擊等。它為我們提供了每個鼠標事件的坐標(x,y)。 通過這個事件和位置,我們可以做任何我們想做的事情。 通過以下代碼,可以列出所有的鼠標事件。
「代碼」
import cv2 events = [i for i in dir(cv2) if 'EVENT' in i] print( events )「輸出」
['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP', 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']參數 ? ?含義
EVENT_MOUSEMOVE ? ?0 ?滑動
EVENT_LBUTTONDOWN ?1 ?左鍵點擊
EVENT_RBUTTONDOWN ?2 ?右鍵點擊
EVENT_MBUTTONDOWN ?3 ?中間點擊
EVENT_LBUTTONUP ? ?4 ?左鍵釋放
EVENT_RBUTTONUP ? ?5 ?右鍵釋放
EVENT_MBUTTONUP ? ?6 ?中間釋放
EVENT_LBUTTONDBLCLK ? ?7 ?左鍵雙擊
EVENT_RBUTTONDBLCLK ? ?8 ?右鍵雙擊
EVENT_MBUTTONDBLCLK ? ?9 ?中間雙擊
二、應用
1. 應用一
創建了一個簡單的應用程序,只要我們雙擊它就可以在圖像上繪制一個圓圈。
「代碼」
import numpy as np import cv2# mouse callback function def draw_circle(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDBLCLK:cv2.circle(img, (x, y), 100, (255, 0, 0), -1)# Create a black image, a window and bind the function to window img = np.zeros((512, 512, 3), np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image', draw_circle)while True:cv2.imshow('image', img)if cv2.waitKey(20) & 0xFF == 27:break cv2.destroyAllWindows()2. 應用二
通過拖動鼠標繪制矩形或圓形(根據我們選擇的模式),就像在繪圖應用程序中一樣。 所以我們的鼠標回調函數有兩個部分,一個用于繪制矩形,另一個用于繪制圓形。在主循環中,設置鍵'm'設置鍵盤綁定進行矩形和圓之間切換。
「代碼」
import numpy as np import cv2drawing = False # true if mouse is pressed mode = True # if True, draw rectangle. Press 'm' to toggle to curve ix,iy = -1,-1# mouse callback function import numpy as np import cv2drawing = False # true if mouse is pressed mode = True # if True, draw rectangle. Press 'm' to toggle to curve ix,iy = -1,-1# mouse callback function def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event == cv2.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)elif event == cv2.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)img = np.zeros((512,512,3), np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image',draw_circle)while True:cv2.imshow('image',img)k = cv2.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:breakcv2.destroyAllWindows()長按二維碼關注我們
有趣的靈魂在等你
總結
以上是生活随笔為你收集整理的【opencv系列05】OpenCV4.X鼠标回调函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python获取原图GPS位置信息,轻松
- 下一篇: 【opencv系列06】OpenCV4.