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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
Python3搜索及替换文件中文本的方法
May 22 Python
python PIL模块与随机生成中文验证码
Feb 27 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python多个模块py文件的数据共享实例
Jan 11 Python
python实现接口并发测试脚本
Jun 25 Python
django框架模板语言使用方法详解
Jul 18 Python
python使用requests.session模拟登录
Aug 09 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 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
使用PHP获取网络文件的实现代码
2010/01/01 PHP
php文件下载处理方法分析
2015/04/22 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
简单了解django缓存方式及配置
2019/07/19 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
推广普通话的宣传语
2015/07/13 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
浅析JavaScript中的变量提升
2022/06/01 Javascript