在处理图像时,可能需要与当前正在处理的图像进行交互。OpenCV
提供了鼠标事件,使用户可以通过鼠标与图像交互。鼠标事件能够识别常用的鼠标操作,例如:针对不同按键的单击、双击,鼠标的滑动、拖曳等。
例如,用户单击鼠标,我们就画一个圆。通常的做法是,创建一个 OnMouseAction()响应函数,将要实现的操作写在该响应函数
内。响应函数是按照固定的格式创建的,其格式为:
def OnMouseAction(event,x,y,flags,param):
式中:
- event 表示触发了何种事件,具体事件如表 19-3 所示。
- x, y 代表触发鼠标事件时,鼠标在窗口中的坐标(x, y)。
- flags 代表鼠标的拖曳事件,以及键盘鼠标联合事件,如表 19-4 所示。
- param 为函数 ID,标识所响应的事件函数,相当于自定义一个 OnMouseAction()函数的ID。
- OnMouseAction 为响应函数的名称,该名称可以自定义。
定义响应函数以后,要将该函数与一个特定的窗口建立联系(绑定),让该窗口内的鼠标触发事件时,能够找到该响应函数并执行。要将函数与窗 口绑定,可以通过 函 数cv2.setMouseCallback()
实现,其基本语法格式是:
cv2.setMouseCallback(winname,onMouse)
式中:
- winname 为绑定的窗口名。
- onMouse 为绑定的响应函数名。
设计一个程序,对触发的鼠标事件进行判断。
import cv2
import numpy as np
def Demo(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDOWN:
print("单击了鼠标左键")
elif event==cv2.EVENT_RBUTTONDOWN :
print("单击了鼠标右键")
elif flags==cv2.EVENT_FLAG_LBUTTON:
print("按住左键拖动了鼠标")
elif event==cv2.EVENT_MBUTTONDOWN :
print("单击了中间键")
# 创建名称为 Demo 的响应(回调)函数 OnMouseAction
# 将响应函数 Demo 与窗口“Demo19.9”建立连接(实现绑定)
img = np.ones((300