python 基于opencv 实现一个鼠标绘图小程序


Posted in Python onDecember 11, 2020

需求

在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换。左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图。

实现思想

用鼠标画图:需要定义鼠标的回调函数mouse_event
画圆或矩形:需要定义一个画图的模式mode
左键单击、移动、释放:需要捕获三个不同的事件
开始画图,结束画图:需要定义一个画图的标记位drawing

实现代码

import cv2 as cv
import numpy as np

drawing = False # 是否开始画图
mode = True # True:画矩形,False:画圆
start = (-1, -1)

# 鼠标的回调函数的参数格式是固定的,不要随意更改。
def mouse_event(event, x, y, flags, param):
  global start, drawing, mode

  # 左键按下:开始画图
  if event == cv.EVENT_LBUTTONDOWN:
    drawing = True
    start = (x, y)
  # 鼠标移动,画图
  elif event == cv.EVENT_MOUSEMOVE:
    if drawing:
      if mode:
        cv.rectangle(img, start, (x, y), (0, 255, 0), -1)
      else:
        cv.circle(img, (x, y), 5, (0, 0, 255), -1)
  # 左键释放:结束画图
  elif event == cv.EVENT_LBUTTONUP:
    drawing = False
    if mode:
      cv.rectangle(img, start, (x, y), (0, 255, 0), -1)
    else:
      cv.circle(img, (x, y), 5, (0, 0, 255), -1)


img = np.zeros((512, 512, 3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image', mouse_event)

while(True):
  cv.imshow('image', img)
  # 按下m切换模式
  if cv.waitKey(1) == ord('m'):
    mode = not mode
  # 按ESC键退出程序
  elif cv.waitKey(1) == 27:
    break

实验结果

python 基于opencv 实现一个鼠标绘图小程序

以上就是python 基于opencv 实现一个鼠标绘图小程序的详细内容,更多关于python 鼠标绘图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python解惑之True和False详解
Apr 24 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
python读取和保存图片5种方法对比
Sep 12 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Python中过滤字符串列表的方法
Dec 22 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
Python 用__new__方法实现单例的操作
Dec 11 #Python
python实现图像高斯金字塔的示例代码
Dec 11 #Python
Pycharm plot独立窗口显示的操作
Dec 11 #Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 #Python
使用python操作lmdb对数据读取的实例
Dec 11 #Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 #Python
python中append函数用法讲解
Dec 11 #Python
You might like
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
PHP一些有意思的小区别
2006/12/06 PHP
php模板中出现空行解决方法
2011/03/08 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
python 七种邮件内容发送方法实例
2014/04/22 Python
Python 列表list使用介绍
2014/11/30 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python线程详解
2015/06/24 Python
Python注释详解
2016/06/01 Python
简单谈谈Python中的闭包
2016/11/30 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
2014年度思想工作总结
2014/11/27 职场文书
体育部部长竞选稿
2015/11/21 职场文书