学得不好,想到哪,写到哪。
import cv2
import numpy as np
def mouseOperation(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print('左键按下')
if event == cv2.EVENT_LBUTTONUP:
print('左键抬起')
if event == cv2.EVENT_LBUTTONDBLCLK:
print('左键双击')
if event == cv2.EVENT_RBUTTONDOWN:
print('右键按下')
if event == cv2.EVENT_RBUTTONUP:
print('右键抬起')
if event == cv2.EVENT_RBUTTONDBLCLK:
print('右键双击')
if event == cv2.EVENT_MOUSEMOVE:
print('鼠标移动')
if event == cv2.EVENT_MBUTTONDOWN:
print('滚轮按下')
if event == cv2.EVENT_MBUTTONUP:
print('滚轮抬起')
if event == cv2.EVENT_MBUTTONDBLCLK:
print('滚轮双击')
if event == cv2.EVENT_MOUSEWHEEL:
print('滚轮滚动')
if flags > 0:
print('向前滚动')
else:
print('向后滚动')
# if event == cv2.EVENT_MOUSEHWHEEL: # 一般用不到,因为一般鼠标没有这个滚轮,有的鼠标有这个滚轮
# print('滚轮左右滚动')
# if flags > 0:
# print('向左滚动')
# else:
# print('向右滚动')
if flags == cv2.EVENT_FLAG_ALTKEY:
print('摁住Alt')
if flags == cv2.EVENT_FLAG_CTRLKEY:
print('摁住Ctrl')
if flags == cv2.EVENT_FLAG_SHIFTKEY:
print('摁住Shift')
if flags == cv2.EVENT_FLAG_LBUTTON:
print('摁住左键拖拽')
if flags == cv2.EVENT_FLAG_MBUTTON:
print('摁住滚轮拖拽')
if flags == cv2.EVENT_FLAG_RBUTTON:
print('摁住右键拖拽')
'''
np.ones(shape, dtype, order)
# shape(高,宽,色彩通道数)
# dtype 常用的是np.unit8
'''
img = np.ones((500, 500, 3), np.uint8)
img = img * 255 # 纯白图像
'''
cv2.namedWindow(winname,flags)
# winname是窗口名字
# flags为窗口显示方式,cv2.WINDOW_NORMAL为正常显示,可以调整大小
# cv2.WINDOW_AUTOSIZE显示原图片的大小,用户不能调整大小
'''
cv2.namedWindow('img')
'''
cv2.setMouseCallback(windowName, onMouse, param )
# windowName 要操作的窗口名,有多个窗口时,仅在指定名字的窗口上有效
# onMouse 回调函数,鼠标事件时被调用的函数指针
# 函数指针原型为void Fun(int event, int x, int y, int flags, void* param)
# event 鼠标的操作动作 x和y,鼠标所在的坐标
# 后两个参数暂时用不到,放那就行
'''
cv2.setMouseCallback('img', mouseOperation)
while 1:
'''
cv2.imshow(winname,mat)
# winname为显示的窗口
# mat 需要显示的图像
'''
cv2.imshow("img", img)
if cv2.waitKey(10) & 0xFF == 27: # 按下Esc键退出
break
cv2.destroyAllWindows() # 销毁所有窗口
结果如下图。当鼠标执行各种操作时,会输出对应的动作名称。为了更好的看到效果,可以先注释掉一些动作,执行程序。
鼠标操作这比较简单,就先这样。