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 15 Python
Python 异常处理的实例详解
Sep 11 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python地图绘制实操详解
Mar 04 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Python 变量的创建过程详解
Sep 02 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Python中的xlrd模块使用原理解析
May 21 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python通过新建环境安装tfx的问题
May 20 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
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python深入学习之对象的属性
2014/08/31 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
电子专业推荐信范文
2013/11/18 职场文书
纺织工程专业个人求职信范文
2014/01/27 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
销售经理岗位职责
2014/03/16 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
学校实习推荐信
2015/03/27 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
PHP解决高并发问题
2021/04/01 PHP
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
正则表达式拆分url实例代码
2022/02/24 Java/Android