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每隔N秒运行指定函数的方法
Mar 16 Python
python修改操作系统时间的方法
May 18 Python
Python算法之图的遍历
Nov 16 Python
python实现神经网络感知器算法
Dec 20 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
django Admin文档生成器使用详解
Jul 22 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python 面向对象部分知识点小结
Mar 09 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
python源文件的字符编码知识点详解
Mar 04 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
javascript实现yield的方法
2013/11/06 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
Python抓取电影天堂电影信息的代码
2016/04/07 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
python:socket传输大文件示例
2017/01/18 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
django序列化serializers过程解析
2019/12/14 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python 线程的五个状态
2020/09/22 Python
python中如何打包用户自定义模块
2020/09/23 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
一些.net面试题
2014/10/06 面试题
思想纪律作风整顿剖析材料
2014/10/11 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
打架检讨书范文
2015/01/27 职场文书
2015年中秋寄语
2015/07/31 职场文书