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 相关文章推荐
python异步任务队列示例
Apr 01 Python
python脚本实现查找webshell的方法
Jul 31 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
深入浅析python 中的匿名函数
May 21 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
python遍历小写英文字母的方法
Jan 02 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python3爬取torrent种子链接实例
Jan 16 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Python中全局变量和局部变量的理解与区别
Feb 07 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与javascript的两种交互方式
2006/10/09 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
javascript document.referrer 用法
2009/04/30 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python去除文件中重复的行实例
2018/06/29 Python
Python实现的特征提取操作示例
2018/12/03 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
人民教师的自我评价分享
2014/02/21 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
论群众路线学习笔记
2014/11/06 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
javascript对象3个属性特征
2021/11/17 Javascript