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中文编码那些事
Jun 25 Python
python中enumerate函数用法实例分析
May 20 Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
pytorch 实现查看网络中的参数
Jan 06 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
python实战之用emoji表情生成文字
May 08 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+MySql编写聊天室
2006/10/09 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
详细分析Python collections工具库
2020/07/16 Python
Python面向对象实现方法总结
2020/08/12 Python
美国社交购物市场:MassGenie
2019/02/18 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
葬礼司仪主持词
2014/03/31 职场文书
村委会换届选举方案
2014/05/03 职场文书
关于爱国的标语
2014/06/24 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
预备党员半年考察意见
2015/06/01 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
2019年教师入党申请书
2019/06/27 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers