目标

  • 了解如何在OpenCV中处理鼠标事件

  • 您将学习以下功能:cv.setMouseCallback()

简单演示

在这里,我们创建一个简单的应用程序,无论我们在哪里双击它,都可以在图像上绘制一个圆。

首先,我们创建一个鼠标回调函数,该函数在发生鼠标事件时执行。鼠标事件可以是与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。通过此活动和地点,我们可以做任何我们喜欢的事情。要列出所有可用的可用事件,请在Python终端中运行以下代码:

import cv2 as cv
events = [i for i in dir(cv) if 'EVENT' in i]
print( events )

创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。因此,我们的鼠标回调函数可以做一件事,在我们双击的地方绘制一个圆圈。因此,请参见下面的代码。代码在注释中是不言自明的:

import numpy as np
import cv2 as cv
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):if event == cv.EVENT_LBUTTONDBLCLK:cv.circle(img,(x,y),100,(255,0,0),-1)
# 创建一个黑色的图像,一个窗口,并绑定到窗口的功能
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):cv.imshow('image',img)if cv.waitKey(20) & 0xFF == 27:break
cv.destroyAllWindows()

更高级的演示

现在我们去寻找一个更好的应用。在这里,我们通过拖动鼠标来绘制矩形或圆形(取决于我们选择的模式) ,就像我们在 Paint 应用程序中所做的那样。所以我们的鼠标回调函数有两部分,一部分用于绘制矩形,另一部分用于绘制圆形。这个具体的例子对于创建和理解一些交互式应用程序非常有帮助,比如目标跟踪,图像分割地图等等。

import numpy as np
import cv2 as cv
drawing = False # 如果按下鼠标,则为真
mode = True # 如果为真,绘制矩形。按 m 键可以切换到曲线
ix,iy = -1,-1
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event == cv.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)elif event == cv.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)

练习题

1.在最后一个示例中,我们绘制了填充矩形。您修改代码以绘制一个未填充的矩形。

☆☆☆为方便大家查阅,小编已将OpenCV-Python专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“文章”,如图:

或点击下方“阅读原文”,进入OpenCV-Python专栏,即可查看系列文章。

不断更新资源

获取更多精彩

长按二维码扫码关注

鼠标作为画笔 | 八相关推荐

  1. opencv04:鼠标作为画笔以及轨迹栏作为调色板

    目标 了解如何在OpenCV中处理鼠标事件 cv2.setMouseCallback() 了解将轨迹栏固定到OpenCV窗口 cv2.getTrackbarPos() cv2.createTrackb ...

  2. Mouse as a Paint-Brush - 鼠标作为画笔

    Mouse as a Paint-Brush - 鼠标作为画笔 OpenCV documentation index - OpenCV 文档索引 https://www.docs.opencv.org ...

  3. OpenCV_005-OpenCV 鼠标作为画笔

    本文主要内容来自于 OpenCV-Python 教程 的 OpenCV 中的 GUI 功能 部分,这个部分的主要内容如下: 图像操作入门 学习加载一幅图像,显示它,并保存它 视频入门 学习播放视频,从 ...

  4. OpenCV-Python 中文教程3——把鼠标当画笔

    OpenCV-Python 中文教程3--把鼠标当画笔 目标 • 学习使用 OpenCV 处理鼠标事件 • 你将要学习的函数是: cv2.setMouseCallback() 1.简单演示       ...

  5. Scratch编程入门-画图模块3【鼠标的画笔之旅】

    上一节课带领大家制作了小的案例使用键盘上的方向键自由的控制画笔. 记不清的朋友可以点击下方链接回顾一下上一节课的内容. Scratch编程入门-画图模块键盘控制的画笔 这一节课的内容和上一节课的内容比 ...

  6. Opencv笔记(五)——把鼠标当画笔

    学习目标:  学习使用 OpenCV 处理鼠标事件 学会使用函数cv2.setMouseCallback() 简单演示:         首先我们来创建一个鼠标事件回调函数,但鼠标事件发生是他就会被执 ...

  7. 7 .opencv中把鼠标当画笔使用

    学习目标 : 1.学会使用OpenCV 处理鼠标事件 2.掌握cv2.setMouseCallback()方法的使用 内容说明: 鼠标事件可以是鼠标上的任何动作,比如左键按下.左松开左.双击等. 我们 ...

  8. python怎么鼠标定位id_Selenium八种元素定位方法(Python)

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

  9. Opencv中鼠标作为画笔

    目标 学习处理OpenCV中的鼠标事件 您将学习以下功能:cv2.setMouseCallback() 简单演示 在这里,我们创建了一个简单的应用程序,它在图像上画一个圆圈,只要我们双击它. 首先,我 ...

最新文章

  1. partprobe源码分析
  2. 如何在网站上同步查看BCH数据
  3. 论文浅尝 - COLING2020 | 桥接文本和知识的多原型嵌入在少样本关系三元组抽取中的研究...
  4. hdfs的副本数为啥增加了_HDFS详解之块大小和副本数
  5. springboot logback 日志配置
  6. 电脑异常关闭导致dubbo启动错误问题
  7. 数据库镜像怎么还原数据库_镜像数据库上的日志传送
  8. Dynamics CRM2013 Server2012R2下IFD部署遇到There is already a listener on IP endpoint的解决方法...
  9. python 循环控制语句结束,Python是如何循环控制语句的
  10. python好友管理系统
  11. [Excel图表实战技巧精粹].Excel.Home.扫描版 百度云
  12. linux 屏幕键盘onborde,电脑虚拟键盘模拟器|On-Screen Keyboard pro(电脑屏幕键盘软件)下载 V9.0.4 官方版 - 比克尔下载...
  13. 老韩思考:卖点----卖豆腐的能转行IT
  14. 领航机器人广告段子_医院机器人物流科技宣传广告语_段子网收录最新段子
  15. 客户贷款逾期预测[1]-逻辑回归模型
  16. overleaf表格_latex编写表格.doc
  17. 【随笔1】石榴红,依旧。
  18. autojs打开微信扫一扫,扫描二维码等信息的脚本
  19. 我用这个画3d图和电路图、上网,防止鼠标手
  20. CJSON 使用介绍

热门文章

  1. PXE实现无人值守安装
  2. golang sync.Map和map+mutex性能比较
  3. 计算机和信息技术革命,人类历史上的四次信息技术革命
  4. ML-czy的小组任务2
  5. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。
  6. 牛客-js练习|错题本+知识点总结-break、try...catch...finally(01)
  7. 【Android studio】使用小米手机(MIUI8)真机调试
  8. 为什么要使用异常及java异常的使用--及js、php、golang的异常机制
  9. 解决:win10打印机连上,但是控制面板显示未指定
  10. RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍