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 12 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Python中Yield的基本用法
Oct 18 Python
python中random模块详解
Mar 01 Python
Python开发五子棋小游戏
May 02 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
smarty section简介与用法分析
2008/10/03 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python学生信息管理系统修改版
2018/03/13 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
C有"按引用传递"吗
2016/09/06 面试题
产品推广策划方案
2014/05/10 职场文书
临床医学专业求职信
2014/08/08 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
小学优秀学生评语
2014/12/29 职场文书
停课通知书
2015/04/24 职场文书
正规借条模板
2015/05/26 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python