OpenCV之鼠标响应函数(setMouseCallback)

本文介绍了如何利用OpenCV的setMouseCallback函数实现人机交互,通过实例展示了如何使用该函数绘制填充和非填充的矩形及圆形。详细解释了函数的语法,并分析了在绘制非填充矩形时遇到的问题及其解决方案。
摘要由CSDN通过智能技术生成

人机交互在物体跟踪、图像特征提取、图像分割等方面都有着广泛的应用。比如说,现在有一张图片,上面存在若干个空洞(数据缺失部分),为了将这些空洞部分提取出来,最简单的一种方法就是构建人机交互程序,首先显示该图片,然后由人手动地画方框来将这些空洞部分给圈出来。这种方法在数据量比较少的时候非常有效且准确。
要实现类似的这种人机交互功能,OpenCV里通常需要用到鼠标回调函数,即setMouseCallback(),下面首先对这个函数进行介绍,接着实现两个简单的人机交互程序。

setMouseCallback函数

1. 语法

  • 原型
    在这里插入图片描述
  • 参数
参数 描述
winname 绑定的窗口名
onMouse 鼠标的回调函数
userdata 可选参数

与鼠标相关的事件及其说明,如下表:

事件(Event) 说明
EVENT_MOUSEMOVE 滑动
EVENT_LBUTTONDOWN 左键点击
EVENT_RBUTTONDOWN 右键点击
EVENT_MBUTTONDOWN 中键点击
EVENT_LBUTTONUP 左键放开
EVENT_RBUTTONUP 右键放开
EVENT_MBUTTONUP 中键放开
EVENT_LBUTTONDBLCLK 左键双击
EVENT_RBUTTONDBLCLK 右键双击
EVENT_MBUTTONDBLCLK 中键双击
EVENT_FLAG_LBUTTON 左键拖拽
EVENT_FLAG_RBUTTON 右键拖拽
EVENT_FLAG_MBUTTON 中间拖拽
EVENT_FLAG_CTRLKEY 按Ctrl不放事件
EVENT_FLAG_SHIFTKEY 按Shift不放事件
EVENT_FLAG_ALTKEY 按Alt不放事件

2. 例子

绘制填充的矩形或圆形

下面程序的功能是,根据选择的模式,绘制填充的矩形或圆形。更详细的说明见代码里的注释。

import cv2
import numpy as np

mode = True #画图模式,画圆形或矩形,True表示画圆形
drawing = False #当鼠标左键单击时变为True,即说明要开始绘图了
x0 = -1
y0 = -1

#定义鼠标响应函数,此函数绘制矩形或圆形
def draw_CirRec(event,x,y,flags,param):
    global mode,drawing
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值