- OpenCV Python 教程
- OpenCV Python - 主页
- OpenCV Python - 概述
- OpenCV Python - 环境
- OpenCV Python - 读取图像
- OpenCV Python - 写入图像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 图像属性
- OpenCV Python - 位运算
- OpenCV Python - 形状和文本
- OpenCV Python - 鼠标事件
- OpenCV Python - 添加轨迹栏
- OpenCV Python - 调整大小和旋转
- OpenCV Python - 图像阈值
- OpenCV Python - 图像过滤
- OpenCV Python - 边缘检测
- OpenCV Python - 直方图
- OpenCV Python - 颜色空间
- OpenCV Python - 转换
- OpenCV Python - 图像轮廓
- OpenCV Python - 模板匹配
- OpenCV Python - 图像Pyramid
- OpenCV Python - 图像相加
- OpenCV Python - 图像混合
- OpenCV Python - 傅里叶变换
- OpenCV Python - 捕获视频
- OpenCV Python - 播放视频
- OpenCV Python - 视频图像
- OpenCV Python - 来自图像的视频
- OpenCV Python - 人脸检测
- OpenCV Python - Meanshift/Camshift
- OpenCV Python - 特征检测
- OpenCV Python - 特征匹配
- OpenCV Python - 数字识别
- OpenCV Python 资源
- OpenCV Python - 快速指南
- OpenCV Python - 资源
- OpenCV Python - 讨论
OpenCV Python - 处理鼠标事件
OpenCV 能够使用回调函数注册各种与鼠标相关的事件。这样做是为了根据鼠标事件的类型启动某个用户定义的操作。
先生编号 | 鼠标事件及描述 |
---|---|
1 | CV.EVENT_MOUSEMOVE 当鼠标指针移到窗口上时。 |
2 | CV.EVENT_LBUTTONDOWN 表示按下了鼠标左键。 |
3 | CV.EVENT_RBUTTONDOWN 按下鼠标右键的事件。 |
4 | CV.EVENT_MBUTTONDOWN 表示鼠标中键被按下。 |
5 | CV.EVENT_LBUTTONUP 当释放鼠标左键时。 |
6 | CV.EVENT_RBUTTONUP 当释放鼠标右键时。 |
7 | CV.EVENT_MBUTTONUP 表示鼠标中键已释放。 |
8 | CV.EVENT_LBUTTONDBLCLK 当双击鼠标左键时会发生此事件。 |
9 | CV.EVENT_RBUTTONDBLCLK 表示双击鼠标右键。 |
10 | CV.EVENT_MBUTTONDBLCLK 表示双击鼠标中键。 |
11 | CV.EVENT_MOUSEWHEEL 向前滚动为正,向后滚动为负。 |
要在鼠标事件上触发函数,必须在setMouseCallback()函数的帮助下注册它。其命令如下 -
cv2.setMouseCallback(window, callbak_function)
该函数将事件的类型和位置传递给回调函数以进行进一步处理。
实施例1
每当在显示图像作为背景的窗口上发生左键双击事件时,以下代码就会绘制一个圆圈 -
import numpy as np import cv2 as cv # mouse callback function def drawfunction(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDBLCLK: cv.circle(img,(x,y),20,(255,255,255),-1) img = cv.imread('lena.jpg') cv.namedWindow('image') cv.setMouseCallback('image',drawfunction) while(1): cv.imshow('image',img) key=cv.waitKey(1) if key == 27: break cv.destroyAllWindows()
输出
运行上述程序并在随机位置双击。将出现类似的输出 -
实施例2
以下程序根据用户输入(1,2 或 3)以交互方式绘制矩形、直线或圆形 -
import numpy as np import cv2 as cv # mouse callback function drawing=True shape='r' def draw_circle(event,x,y,flags,param): global x1,x2 if event == cv.EVENT_LBUTTONDOWN: drawing = True x1,x2 = x,y elif event == cv.EVENT_LBUTTONUP: drawing = False if shape == 'r': cv.rectangle(img,(x1,x2),(x,y),(0,255,0),-1) if shape == 'l': cv.line(img,(x1,x2),(x,y),(255,255,255),3) if shape=='c': cv.circle(img,(x,y), 10, (255,255,0), -1) img = cv.imread('lena.jpg') cv.namedWindow('image') cv.setMouseCallback('image',draw_circle) while(1): cv.imshow('image',img) key=cv.waitKey(1) if key==ord('1'): shape='r' if key==ord('2'): shape='l' if key==ord('3'): shape='c' #print (shape) if key == 27: break cv.destroyAllWindows()
在窗口表面上,如果按下“1”,则在鼠标左键向下和向上的坐标之间绘制一个矩形。
如果用户选择为 2,则使用坐标作为端点绘制一条线。
当为圆选择 3 时,它会在鼠标松开事件的坐标处绘制。
下图是上述程序成功执行后的输出 -