opencv期末练习题(3)附带解析
创建黑色画板,并支持两种画图功能

import mathimport cv2
import numpy as np
"""
1. 创建一个黑色画板
2. 输入q退出
3. 输入m切换画图模式两种模式,画矩形和画圆形。用户按住鼠标左键到一个位置然后释放就可以画出对应的图像
"""
px, py, rx, ry = 0, 0, 0, 0 # 临时保存左键按下时的x,y坐标drawing = False
# 绑定窗体,窗体名为image
cv2.namedWindow("image")canvas = np.zeros((400, 400, 3)) # 创建黑色画板def draw_shape(event, x, y, flags, param):global px, py, rx, ry, canvas, draw_line # 设置全局变量,这样才能够访问方法体外部的变量if not drawing:if event == cv2.EVENT_LBUTTONDOWN: # 判断当前是否为按下左键px, py = x, y # 保存按下左键的坐标if event == cv2.EVENT_LBUTTONUP:rx, ry = x, y # 保存释放左键的坐标cv2.rectangle(canvas, [px, py], [rx, ry], color=(255, 255, 255)) # 根据坐标信息,画出一个黑色的矩形else:if event == cv2.EVENT_LBUTTONDOWN: # 如果用户按下了m键,则切换到画圆形模式px, py = x, yif event == cv2.EVENT_LBUTTONUP:# 计算当前释放点和上次点击的圆心距离多远dis = math.sqrt((x - px) ** 2 + (y - py) ** 2) # 两点之间距离公式cv2.circle(canvas, center=(px, py), radius=int(dis), color=(0, 0, 255)) # 根据离圆心的距离画出圆cv2.setMouseCallback('image', draw_shape) # 设置opencv鼠标事件while 1: # 死循环等待用户cv2.imshow("image", canvas) # 显示当前的画板数据k = cv2.waitKey(10) # 等待10ms,判断用户的键盘数据if k == ord("q"): # 如果输入q则退出程序breakif k == ord('m'): # 如果输入m则切换模型,修改drawing变量drawing = not drawing
这段代码使用 OpenCV 创建了一个简单的画板应用,支持矩形和圆形的绘制。用户可以按下左键拖动以绘制矩形,按下右键拖动以绘制圆形。按下 'q' 键退出程序,按下 'm' 键切换绘制模式(矩形或圆形)。
以下是代码的主要步骤:
-
初始化全局变量:
px,py,rx,ry用于保存左键按下和释放时的坐标,drawing用于标记当前绘制模式。 -
创建一个黑色画板:
canvas = np.zeros((400, 400, 3))。 -
定义鼠标事件处理函数
draw_shape,在函数中根据事件类型和坐标信息绘制矩形或圆形。 -
设置鼠标事件回调函数:
cv2.setMouseCallback('image', draw_shape)。 -
进入死循环,不断显示当前画板,并等待用户的键盘输入。
-
如果用户按下 'q' 键,则退出程序;如果按下 'm' 键,则切换绘制模式。
这个简单的画板演示了如何使用 OpenCV 处理鼠标事件来实现基本的图形绘制功能。
相关文章:
opencv期末练习题(3)附带解析
创建黑色画板,并支持两种画图功能 import mathimport cv2 import numpy as np """ 1. 创建一个黑色画板 2. 输入q退出 3. 输入m切换画图模式两种模式,画矩形和画圆形。用户按住鼠标左键到一个位置然后释放就可以画出对应的图像 "&qu…...
51单片机之LED灯
51单片机之LED灯 🌴前言:🏮点亮LED灯的原理💘点亮你的第一个LED灯💘点亮你的八个LED灯 📌让LED灯闪烁的原理🎽 LED灯的闪烁🏓错误示范1🏓正确的LED闪烁代码应该是这样&am…...
操作系统内存碎片
大家好,我叫徐锦桐,个人博客地址为www.xujintong.com,github地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。 一、前言 内存碎片是指无法被利用的内…...
三菱plc学习入门(二,三菱plc指令,触点比较,计数器,交替,四则运算,转换数据类型)
今天,进行总结对plc的学习,下面是对plc基础的学习,希望对读者有帮助,欢迎点赞,评论,收藏!!! 目录 触点比较 当数据太大了的时候(LDD32位) CMP比…...
Spring学习之——代理模式
Proxy代理模式 介绍 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 2. 组成 抽象角色:通过接口或抽象类声明真实角色实现的…...
【Linux】之搭建 PostgreSQL 环境
前言 在 Linux 系统下安装 PostgreSQL,可以选择快捷方便的 Docker 安装,但正常的服务器都是直接原生安装的,所以,这里我将讲解如何正常安装 PostgreSQL 以及安装之后的一些配置。如果想了解 Docker 安装的话,可以查看我…...
docker 安装elasticsearch、kibana、cerebro、logstash
安装步骤 第一步安装 docker 第二步 拉取elasticsearch、kibana、cerebro、logstash 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2 docker pull docker.elastic.co/kibana/kibana:7.10.2 docker pull lmenezes/cerebro:latest docker pull l…...
C/C++ 联合体
目录 联合体概述 联合体的内存分配 联合体大小计算 联合体概述 联合与结构非常的相似,主要区别就在于联合这两个字。 联合的特征:联合体所包含的成员变量使用的是同一块空间。 联合体定义 //联合类型的声明 union Un {char c;int i; }; //联合变量…...
基于SSM的基金投资交易管理网站的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
JS数据类型转换成Boolean型
在javaScript中 布尔值用到的很频繁 接下来让我稍微为大家介绍一下数据类型转换为布尔型 转换成布尔值为false的类型 console.log(Boolean("")) //falseconsole.log(Boolean(0)) //falseconsole.log(Boolean(undefined)) //falseconsole.log(Boolean(null)) //false…...
uni-app页面数据传参方式
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,可以编译到 iOS、Android、H5、小程序等多个平台。当你在多个页面间传递参数时,通常有多种方法,例如通过 uni.navigateTo、路由参数、本地存储等方式。下面是一些方法的说明和示例代码。 …...
计算机网络实验(二):Wireshark网络协议分析
一、实验名称:Wireshark网络协议分析 二、实验原理 HTTP协议分析 1.超文本传输协议(Hypertext Transfer Protocol, HTTP)是万维网(World Wide Web)的传输机制,允许浏览器通过连接Web服务器浏览网页。目…...
Spark内核解析-数据存储5(六)
1、Spark的数据存储 Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk,本文尝试分析Spark中存储子系统的构成,并以数据写入和数据读取为例,讲述清楚存储子系统中各部件的交互关系。 1.1存储子系统概览 …...
ASP.NET Core高级之认证与授权(一)--JWT入门-颁发、验证令牌
阅读本文你的收获 了解认证和授权的作用了解在ASP.NET Core中实现身份认证的技术都有哪些学习基于JWT认证并学会颁发和验证JWT令牌 一、重要的前置概念 在一个系统中,不是所有的功能和资源都能够被自由地访问,比如你存在银行系统里面的资金,…...
实例:NodeJS 操作 Kafka
本人是C#出身的程序员,c#很简单就能实现,有需要的可以加我私聊。但是就目前流行的开发语言,尤其是面向web方向应用的,我感觉就是Nodejs最简单了。下面介绍: 本文将会介绍在windows环境下启动Kafka,并通过n…...
AI实景无人直播创业项目:开启自动直播新时代,一部手机即可实现增长
在当今社会,直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活,直播已经渗透到了各行各业。然而,传统直播方式存在着一些不足之处,如需现场主持人操作、高昂的费用等。近年来&a…...
YOLOv5改进 | 损失函数篇 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数
一、本文介绍 本文给大家带来的是YOLOv5最新改进,为大家带来最近新提出的InnerIoU的内容同时用Inner的思想结合SIoU、WIoU、GIoU、DIoU、EIOU、CIoU等损失函数,形成 InnerIoU、InnerSIoU、InnerWIoU等新版本损失函数,同时还结合了Focus和AIpha思想,形成的新的损失函数,其…...
构建高效PythonWeb:GraphQL+Sanic
1.1 简介:在当今快速发展的技术时代,Web应用的性能和灵活性变得越来越重要。在众多技术中,GraphQL和Sanic以其独特的优势脱颖而出。GraphQL,作为一个强大的数据查询语言,为前端和后端之间的通信提供了极大的灵活性。而…...
【通义千问】大模型Qwen GitHub开源工程学习笔记(5)-- 模型的微调【全参数微调】【LoRA方法】【Q-LoRA方法】
摘要: 训练数据的准备 你需要将所有样本放到一个列表中并存入json文件中。每个样本对应一个字典,包含id和conversation,其中后者为一个列表。示例如下所示: [{"id": "identity_0","conversations": [{"from": "user",…...
PCL 大地坐标转空间直角坐标(C++详细过程版)
目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 二、代码实现 头文件及读取保存函数见:PCL 空间直角坐标转大地坐标(直接求解法C…...
别再写for循环了!用Java8的groupingBy,一行代码搞定员工按城市分组统计
告别繁琐循环:Java8 groupingBy在数据分组统计中的革命性应用 每次面对从数据库查询出的员工列表,需要按城市、部门或职级进行分组统计时,你是否还在写着重复的for循环?那些嵌套的if判断、临时变量和累加操作不仅让代码臃肿不堪&a…...
终极指南:3分钟为Axure RP安装免费中文语言包,彻底告别英文界面困扰
终极指南:3分钟为Axure RP安装免费中文语言包,彻底告别英文界面困扰 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axu…...
深入USB总线:图解移远EC20在Linux下如何从硬件接口到虚拟出5个ttyUSB
深入USB总线:图解移远EC20在Linux下如何从硬件接口到虚拟出5个ttyUSB 当我们拆解一台嵌入式设备时,常会遇到4G模块这类看似独立却又深度集成的组件。以移远EC20为例,它表面上通过MiniPCIE接口与主机通信,实则内部隐藏着一套复杂的…...
Kafka 场景化面试题top4: 消息积压(Lag)的紧急处理
场景:凌晨 3 点,监控系统报警,发现某个核心 Topic 的消息积压了上千万条,且消费速度远远跟不上生产速度。作为值班工程师,你该如何快速恢复业务,减少积压? 紧急处理四步走(SOP&#…...
MediaCreationTool.bat:解决Windows安装媒体创建痛点的灵活工具
MediaCreationTool.bat:解决Windows安装媒体创建痛点的灵活工具 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...
Azure VM SSH被锁死?别慌,用Serial Console这招救活你的服务器(亲测有效)
Azure VM SSH被锁死?Serial Console终极救援指南 当你在Azure VM上误操作sshd_config导致SSH被完全锁死时,那种绝望感就像被困在数字孤岛。常规的RDP、Bastion甚至重建VM都无济于事——直到发现Serial Console这个隐藏的救命通道。作为经历过同样噩梦的运…...
别让求解器‘装傻’:COMSOL中‘事件接口’的隐藏用法与常见坑点
别让求解器‘装傻’:COMSOL中‘事件接口’的隐藏用法与常见坑点 在瞬态耦合仿真中,你是否遇到过这样的场景:电磁场脉冲已经结束,但温度场仍在缓慢爬升;或者结构载荷突然释放,但求解器却将突变平滑处理&…...
简化OpenAI API调用:轻量级封装库实践指南
1. 项目概述:一个极简的OpenAI API封装库 如果你正在开发一个需要集成AI能力的应用,比如一个聊天机器人、一个内容生成工具,或者一个代码助手,那么你大概率绕不开OpenAI的API。它的功能强大,文档也还算清晰࿰…...
ExifToolGUI终极指南:5分钟掌握照片元数据批量管理
ExifToolGUI终极指南:5分钟掌握照片元数据批量管理 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 还在为海量照片的元数据管理而烦恼吗?每次旅行归来,面对数百张照片的时…...
基于Hammerspoon的macOS光标高亮定位工具实现与优化
1. 项目概述:一个让你不再“找光标”的效率神器你有没有过这样的经历?在27寸甚至更大的显示器上,或者是在多屏工作环境中,眼睛在密密麻麻的代码、文档和浏览器标签之间快速扫视,突然,那个小小的鼠标光标“消…...
