python 基于opencv 实现一个鼠标绘图小程序

 更新时间:2020年12月11日 10:00:04   作者:我坚信阳光灿烂  
这篇文章主要介绍了python 基于opencv 实现一个鼠标绘图小程序,帮助大家更好的理解和使用python的opencv库,感兴趣的朋友可以了解下

需求

在画布上用鼠标画图,可以画圆或矩形,按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 鼠标绘图的资料请关注脚本之家其它相关文章!

相关文章

  • python任务调度实例分析

    python任务调度实例分析

    这篇文章主要介绍了python任务调度实现方法,实例分析了任务调度的原理与Python实现方法,需要的朋友可以参考下
    2015-05-05
  • Python 字典中的所有方法及用法

    Python 字典中的所有方法及用法

    这篇文章主要介绍了Python 字典中的所有方法及用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python3操作注册表的方法(Url protocol)

    python3操作注册表的方法(Url protocol)

    使用python操作注册表的方法最近学习了一下,现在做一下笔记,由于对Python语言的使用还不是很熟练,所以写不出高大上的结构
    2020-02-02
  • python实现将excel文件转化成CSV格式

    python实现将excel文件转化成CSV格式

    下面小编就为大家分享一篇python实现将excel文件转化成CSV格式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 使用Python的PIL模块来进行图片对比

    使用Python的PIL模块来进行图片对比

    这篇文章主要介绍了使用Python的PIL模块来进行图片对比的方法,搜索引擎最基本的图片搜索也是利用图片颜色值的对比来实现的,需要的朋友可以参考下
    2016-02-02
  • keras tensorflow 实现在python下多进程运行

    keras tensorflow 实现在python下多进程运行

    今天小编就为大家分享一篇keras tensorflow 实现在python下多进程运行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python import用法以及与from...import的区别

    Python import用法以及与from...import的区别

    这篇文章主要介绍了Python import用法以及与from...import的区别,本文简洁明了,很容易看懂,需要的朋友可以参考下
    2015-05-05
  • Python转换itertools.chain对象为数组的方法

    Python转换itertools.chain对象为数组的方法

    这篇文章主要介绍了Python转换itertools.chain对象为数组的方法,通过代码给大家介绍了itertools 的 chain() 方法,需要的朋友可以参考下
    2020-02-02
  • Python语法学习之线程的创建与常用方法详解

    Python语法学习之线程的创建与常用方法详解

    本文主要介绍了线程的使用,线程是利用进程的资源来执行业务,并且通过创建多个线程,对于资源的消耗相对来说会比较低,今天就来看一看线程的使用方法具体有哪些吧
    2022-04-04
  • Python利用Matplotlib绘制图表详解

    Python利用Matplotlib绘制图表详解

    Matplotlib是Python中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是Python常用的 2D 绘图库。本文将介绍如何通过Matplotlib绘制常用的图表
    2022-01-01

最新评论