大家想一想鼠标都可以有哪些事件?
其实我们可以用脚本的方式,查看cv2
所有以EVENT
开头的预定义变量的名称列表
'''
查看cv2都支持哪些事件
'''
import cv2
events=[i for i in dir(cv2) if 'EVENT'in i]
for event in events:
print(event)
快去试一试吧。
鼠标事件列表(event list)
EVENT_MOUSEMOVE
鼠标移动 Mouse MoveEVENT_LBUTTONDOWN
鼠标左键点击 Left Button DownEVENT_RBUTTONDOWN
鼠标右键点击 Right Button DownEVENT_MBUTTONDOWN
鼠标中键点击 Middle Button DownEVENT_LBUTTONUP
鼠标左键抬起 Left Button UpEVENT_RBUTTONUP
鼠标右键抬起 Right Button UpEVENT_MBUTTONUP
鼠标中键抬起 Middle Button UpEVENT_LBUTTONDBLCLK
鼠标左键双击 Left Button Double ClickEVENT_RBUTTONDBLCLK
鼠标右键双击 Right Button Double ClickEVENT_MBUTTONDBLCLK
鼠标中键双击 Middle Button Double Click
鼠标事件举例:
def onMouse(event,x,y,flags,param):
# 判断事件是否为 Left Button Double Clicck
if event == cv2.EVENT_LBUTTONDBLCLK:
# 判断事件类型 执行相关操作
do_something()
-
event
鼠标事件类型, 如上文所述EVENT_MOUSEMOVE
等。 -
x
鼠标当前在窗口Windows下的x坐标 -
y
鼠标在当前窗口Windows下的y坐标 -
flags
鼠标事件发生过程值中的一些其他事件标志/状态EVENT_FLAG_LBUTTON
左键正在按下EVENT_FLAG_RBUTTON
右键正在被按下EVENT_FLAG_MBUTTON
中键正在被按下EVENT_FLAG_CTRLKEY
CTRL键正在被按下EVENT_FLAG_SHIFTKEY
SHIFT键正在被按下EVENT_FLAG_ALTKEY
ALT键正在被按下
-
param
用户自定义的参数
简单一些的例子, 例如, 我们判断鼠标左键是否被按下, 如果按下的话就绘制一个圆圈。
def draw_circle(event,x,y,flags,param):
# 判断事件是否为 Left Button Double Clicck
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),20,(255,0,0),-1)
更复杂一些的判断方法, 是结合flags
我们起始可以在很多函数的参数看到flags 这类语句。 使用方法跟我们在CH2.2里讲解的namedWindow
函数类似。
例如我们想判断, 当前左键跟ALT键是不是处于同时被按下的状态, 我们可以这么写:
def onMouse(event,x,y,flags,param):
if flags == ( cv2.EVENT_FLAG_LBUTTON | cv2.EVENT_FLAG_ALTKEY):
# 判断事件类型 执行相关操作
do_something()
你也可以使用+
运算, 两者的效果是相同的, 详情,还是要看我在CH2.2
章节里的介绍啊。二进制位表示状态。
def onMouse(event,x,y,flags,param):
if flags == ( cv2.EVENT_FLAG_LBUTTON + cv2.EVENT_FLAG_ALTKEY):
# 判断事件类型 执行相关操作
do_something()
我们也可以结合两者。做一个复杂的状态检测。 CTRL + 鼠标左键, 移动鼠标,绘制一个系列圆圈。
# CTRL + 鼠标左键, 移动鼠标,绘制一个系列圆圈
def onMouse(event,x,y,flags,param):
# 判断事件是否为 Left Button Double Clicck
print(flags)
print(cv2.EVENT_FLAG_LBUTTON | cv2.EVENT_FLAG_CTRLKEY)
if event == cv2.EVENT_MOUSEMOVE and flags == (cv2.EVENT_FLAG_LBUTTON | cv2.EVENT_FLAG_CTRLKEY ):
cv2.circle(img,(x,y),20,(255,0,0),-1)
项目实战-绘图板
TODO 添加url