需求

在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换。左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图。

实现思想

用鼠标画图:需要定义鼠标的回调函数mouse_event
画圆或矩形:需要定义一个画图的模式mode
左键单击、移动、释放:需要捕获三个不同的事件
开始画图,结束画图:需要定义一个画图的标记位drawing

实现代码

import cv2 as cv
import numpy as npdrawing = 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 = Truestart = (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 = Falseif 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

实验结果

opencv 实现一个鼠标绘图小程序相关推荐

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

    需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...

  2. 基于C++实现一个支持简单交互绘图小程序

    资源下载地址:https://download.csdn.net/download/sheziqiong/86763967 资源下载地址:https://download.csdn.net/downl ...

  3. 【IPC-钩子】WM_COPYDATA和鼠标钩子小程序

    [IPC-钩子]WM_COPYDATA和鼠标钩子小程序 作者:  来自:  阅读次数: 218 [大 中 小] -------------------------------------------- ...

  4. OpenCV-Python——一个搞笑的小程序,实现抖音戴墨镜效果

    转自:github地址:https://github.com/tomoncle/face-detection-induction-course 目录 简介 摄像头实时运行 图片生成gif动图 简介 在 ...

  5. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  6. php在线备忘录,一个会话备忘录小程序的实现方法

    前面我们分享过很多微信小程序的文章,包括微信小程序仿知乎,今天我们继续和大家分享一个有取得小程序:一个会话备忘录的小程序的实现,希望大家喜欢. 说明: 数据在本地缓存中操作,纯前端无后台,不用担心信息 ...

  7. java恶作剧小程序_一个Java恶搞小程序

    运用Java程序控制某个应用程序的运行(以网易云音乐为例),步骤如下 1.建立bat文件分别是start.bat(控制程序的运行)和kill.bat(控制程序的结束): start.bat 的内容如下 ...

  8. python文件分发_python 写一个文件分发小程序

    一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...

  9. springboot md5加密_实在!基于Springboot和WebScoket,写了一个在线聊天小程序

    基于Springboot和WebScoket写的一个在线聊天小程序 (好几天没有写东西了,也没有去练手了,就看了看这个...) 项目说明 此项目为一个聊天的小demo,采用springboot+web ...

最新文章

  1. 二极管7种应用电路详解之六
  2. 基于Struts2的供求信息网设计(一)
  3. 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
  4. Boost:Bimap简单示例
  5. python while循环if_初入python 用户输入,if,(while 循环)
  6. 2017下半年网络规划设计师考试下午真题
  7. 四阶行列式直接展开_【Just For Fun】n 階行列式計算 宏 生成器,四阶行列式的最优展开...
  8. 多线程android代码,android入门 — 多线程(一)(示例代码)
  9. 移动平台开发项目(推箱子小游戏)
  10. 苹果Mac矢量图形设计工具:Affinity Designer Beta
  11. 《Windows游戏编程大师技巧》五、DirectX基础知识和令人生畏的COM
  12. OpenJDK8和OpenJDK8u的差异
  13. 秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
  14. java无法远程读写HDFS系统解决方案
  15. 利用Python高效自动化运维巡检网络设备
  16. #EDA(电子设计自动化)
  17. 母牛的故事【HDOJ2018】
  18. Arduino 点灯实验
  19. 全球与中国多模连续光纤激光器市场现状及未来发展趋势
  20. 深入理解读写锁ReentrantReadWriteLock

热门文章

  1. python视频-python剪切视频与合并视频的实现
  2. python基础教程百度云-python从入门到精通视频百度云盘下载
  3. 零基础学python还是c语言-零基础学Python之前需要学c语言吗
  4. 第P题 扔盘子(双重循环就行) 详解=====有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度
  5. 如何用python完成基本统计信息计算_如何用python计算基本统计值?
  6. 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc
  7. h5比html新增加的标签,H5新增的标签以及改良的标签
  8. 【链表】牛客网:链表删除
  9. 使用FFMPEG类库分离出多媒体文件中的音频码流
  10. Oracle的字符串转换成二进制,将二进制字符串解析为文本/字符