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' 键切换绘制模式(矩形或圆形)。

以下是代码的主要步骤:

  1. 初始化全局变量:px, py, rx, ry 用于保存左键按下和释放时的坐标,drawing 用于标记当前绘制模式。

  2. 创建一个黑色画板:canvas = np.zeros((400, 400, 3))

  3. 定义鼠标事件处理函数 draw_shape,在函数中根据事件类型和坐标信息绘制矩形或圆形。

  4. 设置鼠标事件回调函数:cv2.setMouseCallback('image', draw_shape)

  5. 进入死循环,不断显示当前画板,并等待用户的键盘输入。

  6. 如果用户按下 'q' 键,则退出程序;如果按下 'm' 键,则切换绘制模式。

这个简单的画板演示了如何使用 OpenCV 处理鼠标事件来实现基本的图形绘制功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Could not resolve all dependencies for configuration ‘:classpath‘

报错解析: 问题是与构建配置和依赖解析有关的,特别是在使用Maven或Gradle这样的构建工具时 报错解决: 该方法在网上经过多个参考后认为对我自己有用的方法,就是将maven镜像的http改为https

静态库与动态库

这里写目录标题 静态库与动态库简介 静态库简图制作与使用总览制作 二级目录 动态库(共享库)简图二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 静态库与动态库 简介 静态库&…

python 画图转化为html

优点:画图转化为html可以手动拖动。并且可以放大缩小 示例一 import matplotlib.pyplot as plt import mpld3# 准备数据和图表 x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11]fig, ax plt.subplots(figsize (10,10)) ax.plot(x, y, o-, labelData Points) ax.set_xlabe…

访问学者J1签证的申请流程

访问学者J1签证是许多人前往美国进行学术研究和文化交流的重要途径之一。申请J1签证需要经过一系列步骤和程序,让知识人网小编带大家来了解一下申请流程吧。 首先,申请者需要确认自己符合J1签证的资格要求。这包括被美国的赞助机构或组织接受&#xff0c…

微前端 Micro App

MicroApp 官网链接 MicroApp 链接

使用jieba库进行中文分词和去除停用词

jieba.lcut jieba.lcut()和jieba.lcut_for_search()是jieba库中的两个分词函数,它们的功能和参数略有不同。 jieba.lcut()方法接受三个参数:需要分词的字符串,是否使用全模式(默认为False)以及是否使用HMM模型&…

C++ DAY5 作业

1.全局变量,int monster 10000;定义英雄类hero,受保护的属性string name,int hp.int attck;公有的无参构造,有参构造,虚成员函数void Atk()blood-0;},法师类继承自英雄类,私有属性int ap_atk50…

CyberLink的颜色修正软件ColorDirector Ultra 2024 12.0版本在windows系统下载与安装配置

目录 前言一、ColorDirector Ultra 安装二、使用配置总结 前言 ColorDirector Ultra是由CyberLink公司开发的一款专业的颜色修正和调整工具,可以帮助用户实现对视频中颜色的全方位管理。该软件支持对各种分辨率的视频进行颜色调整,并且可以从各种设备&a…

QT系统移植教程

QT系统移植教程 QT系统移植教程 qt教程: http://www.qter.org/portal.php?modview&aid5 下载源码: http://download.qt.io/archive/qt/5.4/5.4.2/single/ 解压源码: tar -xvf qt-everywhere-opensource-src-5.4.2.tar.x…

【hive】报错累积

6.1 创建新表 错误1:FAILED: SemanticException [Error 10006]: Line 1:63 Partition not found "20210919" 场景:在创建例行表时,报错。这种情况是先创建了多级分区表(date,product)&#xff0c…

Ubuntu 20.04 上安装和使用 Docker

Ubuntu 20.04 上安装和使用 Docker 在 Ubuntu 上安装 Docker 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包。 一、开始安装 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTP…

Spring学习目标

Spring概述Spring IOC[重点]基于注解的IOC配置Spring AOP[重点]基于注解的AOP配置Spring整合MyBatisSpring事务控制[重点]基于注解的事务控制

你不知道的 CSS 之 包含块 ! 最细讲解,一听就懂!

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

devops使用+vscode使用

官方文档 使用 Git 进行代码 - Azure DevOps | Microsoft Learn 用ssh远程连接服务器debug 在插件中搜索SSH ,具体步骤可以参考以下步骤 https://cloud.tencent.com/developer/article/1840922

Flutter 混合开发 - 动态下发 libflutter.so libapp.so

背景 最近在做包体积优化,在完成代码混淆、压缩,裁剪ndk支持架构,以及资源压缩(如图片转webp、mp3压缩等)后发现安装包的中占比较大的仍是 so 动态库依赖。 具体查看发现 libflutter.so 和 libapp.so 的体积是最大的&…

基于SpringBoot的图书电子商务网站的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的图书电子商务网站的设计…

LobeChat:搭建你的私人 GPT!

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello,大家好,我是 Sunday。 之前有同学问我:“老师,我想要搭建一个个人的 …

2024.1.2C语言 结构

一.结构的定义 1.概念 在C语言中,结构是一种用户自定义的数据类型,它允许您将多个不同类型的数据组合成一个单一的数据类型,如 struct student {int num;//学号char name[10];//姓名int computer, english, math;//3门课程成绩double average;//个人平…

《编程之光:解密ECMAScript与JavaScript的微妙关系》

目录 1. ECMAScript:光芒背后的规范2. JavaScript:语言的真实承载者3. 为何关系微妙?4. 编程之光的启示结尾: 标题:《编程之光:解密ECMAScript与JavaScript的微妙关系》 在前端开发的世界中,ECM…

搞懂flyaway一篇就够了

Flyway是一个用于数据库迁移的开源工具,它可以帮助开发人员轻松地管理数据库架构的变化。Flyway通过迁移来更新数据库,迁移可以使用特定于数据库的SQL语法或者用于高级数据库转换的Java编写。Flyway支持两种类型的迁移:有版本的迁移和可重复的迁移。有版本的迁移具有唯一的版…