OpenCV可在用户触发鼠标事件时,调用鼠标回调函数完成事件处理。
鼠标回调函数的基本格式如下。
def mouseCallback(event,x,y,flags,param):…
参数说明如下。
mouseCallback为自定义函数名称。
event为调用时传递给函数的鼠标事件对象。
x和y为触发鼠标事件时,鼠标指针在窗口中的坐标(x,y)。
flags为触发鼠标事件时,鼠标拖动或键盘按键操作,参数可设置为下列常量。
cv2.EVENT_LBUTTONDBLCLK:双击鼠标左键。
cv2.EVENT_LBUTTONDOWN:按下鼠标左键。
cv2.EVENT_LBUTTONUP:释放鼠标左键。
cv2.EVENT_MBUTTONDBLCLK:双击鼠标中键。
cv2.EVENT_MBUTTONDOWN:按下鼠标中键。
cv2.EVENT_MBUTTONUP:释放鼠标中键。
cv2.EVENT_MOUSEHWHEEL:滚动鼠标中键(正、负值表示向左或向右滚动)。
cv2.EVENT_MOUSEMOVE:鼠标移动。
cv2.EVENT_MOUSEWHEEL:滚动鼠标中键(正、负值表示向前或向后滚动)。
cv2.EVENT_RBUTTONDBLCLK:双击鼠标右键。
cv2.EVENT_RBUTTONDOWN:按下鼠标右键。
cv2.EVENT_RBUTTONUP:释放鼠标右键。
cv2.EVENT_FLAG_ALTKEY:按下【Alt】键。
cv2.EVENT_FLAG_CTRLKEY:按下【Ctrl】键。
cv2.EVENT_FLAG_LBUTTON:按住鼠标左键拖动。
cv2.EVENT_FLAG_MBUTTON:按住鼠标中键拖动。
cv2.EVENT_FLAG_RBUTTON:按住鼠标右键拖动。
cv2.EVENT_FLAG_SHIFTKEY:按下【Shift】键。
param为传递给回调函数的其他数据。
cv2.setMouseCallback()用于为图像窗口绑定鼠标回调函数,其基本格式如下。
cv2.setMouseCallback(wname, mouseCallback)
参数说明如下。
wname为图像窗口的名称。
mouseCallback为鼠标回调函数名称。
示例代码如下。
test3-10.py:响应鼠标事件
import numpy as np
import cv2
img=np.zeros((200,320,3), np.uint8)+255 #创建一幅白色图像
def draw(event,x,y,flag,param): #定义鼠标回调函数
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),20,(255,0,0),-1) #双击鼠标左键时画圆
elif event==cv2.EVENT_RBUTTONDBLCLK:
cv2.rectangle(img,(x,y),(x+20,y+20),(0,0,255),-1) #双击鼠标右键时画矩形
cv2.namedWindow('drawing') #命名图像窗口
cv2.setMouseCallback('drawing',draw) #为窗口绑定回调函数
while(True):
cv2.imshow('drawing',img) #显示图像
k = cv2.waitKey(1)
if k == 27: #按【Esc】键时结束循环
break
cv2.destroyAllWindows()