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 相关文章推荐
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
Python NumPy库安装使用笔记
May 18 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
selenium+python设置爬虫代理IP的方法
Nov 29 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
python dlib人脸识别代码实例
Apr 04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 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查询相似度最高的字符串的方法
2015/03/12 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Cookie 小记
2010/04/01 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python线程信号量semaphore使用解析
2019/11/30 Python
python super函数使用方法详解
2020/02/14 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
师范大学毕业自我鉴定
2013/11/21 职场文书
八一慰问活动方案
2014/02/07 职场文书
大学应届生的自我评价
2014/03/06 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
通知函格式范文
2015/04/27 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python