本节课需要注意以下知识点: # Opencv允许我们对窗口上的鼠标做出相应 # setMouseCallback(winname, callback, userdata) 为鼠标参数设置一个回调参数 # winname为窗口名字, callback为回调函数, userdata是给回调函数的参数 # 回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。 # 回调函数通常用于事件处理、异步编程和处理各种操作系统和框架的API。 # callback(event, x, y, flags, userdata)回调参数必须包括这5个参数。 # 其中,event是鼠标事件(鼠标移动,左键,右键), x,y是点鼠标的坐标点。 # flags主要用于组合键, userdata是上面setMouseCallback的userdata-给回调函数的参数
鼠标事件:MouseEvent
接口指用户与指针设备(如鼠标)交互时发生的事件。使用此接口的常见事件包括:click、dblclick、mouseup、mousedown。
常见鼠标事件event:
- 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 中键双击
- EVENT_MOUSEWHEEL 10 鼠标滚轮上下滚动
- EVENT_MOUSEHWHEEL11鼠标左右滚动
常见flags(鼠标的组合操作):
- EVENT_FLAG_LBUTTON 1 按下左键
- EVENT_FLAG_RBUTTON 2 按下右键
- EVENT_FLAG_MBUTTON 4 按下中键
- EVENT_FLAG_CTRLKEY 8 按下ctrl键
- EVENT_FLAG_SHIFTKEY 16 按下shift键
- EVENT_FLAG_ALTKEY 32 按下alt键
下面为代码展示:
import cv2
import numpy as np
def mouse_callback(event, x, y, flags, userdata): # 创建回调函数, 函数名可以随便取,但是参数必须是5个
print(event, x, y, flags, userdata)
cv2.namedWindow("mouse", cv2.WINDOW_NORMAL)
cv2.resizeWindow("mouse", 640, 480) # 设置窗口大小分别对应宽度和高度
# 设施鼠标的回调函数
cv2.setMouseCallback("mouse", mouse_callback, "123")
# 生成全黑的图片 创建np对应于先行后列, 行对应于高度,列对应于宽度
img = np.zeros((360, 640, 3), np.uint8)
while True:
cv2.imshow("mouse", img)
key = cv2.waitKey(1)
if key == ord("q"):
break
cv2.destroyAllWindows() # 释放资源
展示结果如下:
需要注意的是,在Pycharm中调用cv2.setMouseCallback会显示不存在,此时忽略直接在其中填入参数即可。