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获取电脑硬件信息及状态的实现方法
Aug 29 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
python实现简单中文词频统计示例
Nov 08 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python实现Restful API的例子
Aug 31 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
python Matplotlib模块的使用
Sep 16 Python
详解如何修改python中字典的键和值
Sep 29 Python
python math模块的基本使用教程
Jan 16 Python
浅谈Python numpy创建空数组的问题
May 25 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
PHP6 mysql连接方式说明
2009/02/09 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
英国网上花店:Bunches
2016/11/29 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
2014年电话客服工作总结
2014/12/09 职场文书