学习目标:

  •  学习使用 OpenCV 处理鼠标事件
  • 学会使用函数cv2.setMouseCallback()

简单演示:

        首先我们来创建一个鼠标事件回调函数,但鼠标事件发生是他就会被执行。鼠标事件可以是鼠标上的任何动作,比如左键按下,左键松开,左键双击等。该函数还提供了鼠标点击的位置。

Event 中文释义
cv2.EVENT_MOUSEMOVE 鼠标移动
cv2.EVENT_LBUTTONDOWN 左键点击
cv2.EVENT_RBUTTONDOWN 右键点击
cv2.EVENT_MBUTTONDOWN 中间点击

cv2.EVENT_LBUTTONUP

左键释放
cv2.EVENT_RBUTTONUP 右键释放
cv2.EVENT_MBUTTONUP 中间释放
cv2.EVENT_LBUTTONDBLCLK 左键双击
cv2.EVENT_RBUTTONDBLCLK 右键双击
cv2.EVENT_MBUTTONDBLCLK 中间双击


import numpy as np
import cv2
def draw_circle(event,x,y,flags,param):if event==cv2.EVENT_LBUTTONUP :cv2.circle(img,(x,y),20,(255,0,0),-1)
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('opencv')
cv2.setMouseCallback('opencv',draw_circle)
while(1):cv2.imshow('opencv',img)if cv2.waitKey(1) & 0xFF == ord('q'):break
cv2.destroyAllWindows()
  • 先创建一个鼠标事件回调函数,event表示鼠标事件,x,y表示鼠标事件的位置,flags代表鼠标拖拽事件。自己在函数中定义事件的类型,上述代码定义的是左键释放画圈。
  • cv2.setMouseCallback('Window_name',def),第一个参数是窗口名,第二个参数是用于处理的回调函数。

高级演示:

用鼠标左键点击后拖动画矩形,按下m建变换模式,改画圆。

import numpy as np
import cv2drawing = False
mode = True
ix,iy = -1,-1def draw_circle(event,x,y,flags,param):global drawing,mode,ix,iyif event==cv2.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event==cv2.EVENT_MOUSEMOVE :if drawing == True:if mode == True:cv2.rectangle(img,(ix,iy),(x,y),(255,0,0),2)else:cv2.circle(img,(x,y),50,(0,255,0),3)elif event == cv2.EVENT_LBUTTONUP:drawing = Falseimg = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('opencv')
cv2.setMouseCallback('opencv',draw_circle)
while(1):cv2.imshow('opencv',img)if cv2.waitKey(1) & 0xFF == ord('q'):breakelif cv2.waitKey(1) &0xFF == ord('m'):mode = not mode
cv2.imwrite('/home/wl/1.jpg',img)
cv2.destroyAllWindows()

转载于:https://www.cnblogs.com/longwhite/p/10397778.html

Opencv笔记(五)——把鼠标当画笔相关推荐

  1. opencv学习笔记五--文件扫描+OCR文字识别

    opencv学习笔记五--文件扫描+OCR文字识别 文件扫描 定义函数 边缘检测 获取轮廓 变换 OCR文字识别 环境配置 代码 文件扫描 # 导入工具包 import numpy as np imp ...

  2. Java之GUI编程学习笔记六 —— AWT相关(画笔paint、鼠标监听事件、模拟画图工具)

    Java之GUI编程学习笔记六 -- AWT相关(画笔paint) 参考教程B站狂神https://www.bilibili.com/video/BV1DJ411B75F 了解paint Frame自 ...

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

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

  4. OpenCV 笔记 -- 边缘检测(Sobel、Laplace、Canny)

    OpenCV 笔记 – 边缘检测(Sobel.Laplace.Canny) 参考文档 一.Sobel 算子 1.简介 Sobel 算子是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度近似值.在 ...

  5. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  6. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

  7. Opencv 笔记5 边缘处理-canny、sobel、Laplacian、Prewitt

    一.边缘检测概述 边缘检测是计算视觉中的基本问题,边缘检测的目的是标识图像中亮度变换明显的点.边缘检测大幅度的减少了图像的数据量(分为两种:灰度图像边缘检测和彩色图像边缘检测),并且剔除了不相关的信息 ...

  8. OpenCV笔记—投影与三维测量

    OpenCV笔记-投影与三维测量 一.立体成像 1.1 概述 1.2 三角测量 1.3 对极几何 1.4 本征矩阵与基本矩阵 1.4计算极线 1.5立体标定 1.6立体校正 1.7 校正映射 1.8 ...

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

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

  10. OpenCV_005-OpenCV 鼠标作为画笔

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

最新文章

  1. 封装一个计时器,记录页面的停留时间
  2. ASP.NET生成静态页面的方法
  3. 每日一皮:你不看我的接口文档就乱调的吗?
  4. 如何复制百度文库中的文章
  5. 腾讯云连续四年登上KVM开源贡献榜,两项技术获评年度核心突破
  6. 解决UbuntuE: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
  7. 如何用web3.js在以太坊区块链上保存数据?
  8. vue中渲染对象中属性时显示未定义_揭开 vue 背后的秘密(1)
  9. P2770 航空路线问题(网络流)
  10. html select 文字居中显示图片,html原生select改造箭头及文字左右居中的一种办法...
  11. CentOS下yum安装mcrypt错误:No package php-mcrypt available.解决方法
  12. python3解析库pyquery
  13. MyBatis3与Spring3的整合配置(初级篇)
  14. win10无法安装软件,点击大部分exe文件无反应,无提示(安装了火绒)
  15. Win10 CMD命令大全—超好用快捷键
  16. hd6630m可以玩lol吗_《LOL》流畅玩!Intel HD620核显性能实测
  17. latex 显示黑色的点命令 black dot.
  18. 前端职业规划 - 写给年轻的前端韭菜们
  19. Chrome游览器改变SameSite设置
  20. lua脚本php,phpStudy中起用lua脚本_PHP教程

热门文章

  1. 【转】js实现复制到剪贴板功能,兼容所有浏览器
  2. 基于windows 2012部署oracle 12.1.0.2 rac历险记
  3. Linux 计划任务 访问网页
  4. JS学习笔记(一)DOM事件和监听
  5. 华为10GE LAN板与Wan板区别
  6. saltstack使用指南----常用执行模块
  7. Mac自定义终端的欢迎页
  8. 用C++写一个没人用的ECS
  9. Vmware安装提示在关闭以下进程 之前,无法进行安装的解决办法
  10. 程序提示确认关闭后退出