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 13 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python元组知识点总结
Feb 18 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python3+Appium安装使用教程
Jul 05 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python实现按日期归档文件
Jan 30 Python
python爬虫scrapy基本使用超详细教程
Feb 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
CI框架整合smarty步骤详解
2016/05/19 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
详解Python中类的定义与使用
2017/04/11 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
python实现登录与注册系统
2020/11/30 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
公司口号大全
2014/06/11 职场文书
大学专科自荐信
2014/06/17 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
导游词之西安大清真寺
2019/12/17 职场文书