python开发之HighGUI上位机开发(二)( 四 )

  • 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 Clicckif event == cv2.EVENT_LBUTTONDBLCLK:cv2.circle(img,(x,y),20,(255,0,0),-1)1234更复杂一些的判断方法 ,是结合flags
我们起始可以在很多函数的参数看到flags 这类语句 。
例如我们想判断当前左键跟ALT键是不是处于同时被按下的状态 ,我们可以这么写:
def onMouse(event,x,y,flags,param):if flags == ( cv2.EVENT_FLAG_LBUTTON | cv2.EVENT_FLAG_ALTKEY):# 判断事件类型 执行相关操作do_something()1234你也可以使用+运算 ,两者的效果是相同的 ,二进制位表示状态 。
def onMouse(event,x,y,flags,param):if flags == ( cv2.EVENT_FLAG_LBUTTON + cv2.EVENT_FLAG_ALTKEY):# 判断事件类型 执行相关操作do_something()1234我们也可以结合两者 。 做一个复杂的状态检测 。CTRL + 鼠标左键 ,移动鼠标 , 绘制一个系列圆圈 。
# CTRL + 鼠标左键 ,移动鼠标 , 绘制一个系列圆圈def onMouse(event,x,y,flags,param):# 判断事件是否为 Left Button Double Clicckprint(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)1234567【python开发之HighGUI上位机开发(二)】欢迎大家三连(关注、评论、点赞)一起学习