鼠标事件
打印所有鼠标事件
importcv2 as cv
events= [i for i in dir(cv) if 'EVENT' ini]print( events )
#['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP',
'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP', 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']
将窗口与鼠标事件绑定
cv2.setMouseCallback(windowName, MouseCallback, param=None)
windowName:窗口名称
param:响应函数传递的的参数
鼠标响应回调函数
MouseCallback (int event, int x, int y, int flags, void *userdata)
x:鼠标的x坐标
y:鼠标的y坐标
userdata:可选参数
综合示例
importnumpy as npimportcv2 as cv
drawing= False #true if mouse is pressed
ix, iy = -1, -1
defdraw_circle(event, x, y, flags, param):globalix, iy, drawing, modeif event ==cv.EVENT_LBUTTONDOWN:
drawing=True
ix, iy=x, yelif event ==cv.EVENT_MOUSEMOVE:if drawing isTrue:
cv.circle(img, (ix, iy), abs(y-iy), (0, 0, 255), -1)elif event ==cv.EVENT_LBUTTONUP:
drawing=False
cv.circle(img, (ix, iy), abs(y-iy), (0, 0, 255), -1)
img= np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image', draw_circle)while(1):
cv.imshow('image', img)
k= cv.waitKey(1) & 0xFF
if k == 27:breakcv.destroyAllWindows()