OpenCV(绘图功能笔记)

news2024/11/15 10:24:15

目标

学习使用OpenCV绘制不同的几何形状
cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。

画线(cv.line)

要绘制一条线,需要传递线的开始和结束坐标。我们将创建一个黑色图像,并从左上角到右下角在其上绘制一条蓝线。

import numpy as np
import cv2 as cv

# 创建黑色的图像,大小为512x512像素,3个颜色通道(RGB)
img = np.zeros((512, 512, 3), np.uint8)


while 1:  # 创建一个无限循环,直到用户按下空格键
    # 颜色为白色,线条厚度为50
    cv.line(img, (0, 250), (511, 250), (255, 255, 255), 50)

    # 显示图像
    cv.imshow('line', img)

    # 如果用户按下空格键,则退出循环
    if cv.waitKey(0) == ord(' '):
        break

    # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()

在这里插入图片描述

画矩形(cv.rectangle)

cv.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
参数说明:
img:要绘制矩形的图像。
pt1:矩形的一个角的坐标(通常是左上角)。
pt2:矩形对角线上的另一个角的坐标(通常是右下角)。
color:矩形的颜色,以BGR格式指定(即蓝色、绿色、红色的强度)。
thickness:线条的厚度。如果设置为-1(或cv.FILLED),则矩形会被填充。
lineType:线条的类型,例如cv.LINE_8、cv.LINE_AA等。如果未指定,则使用默认值。
shift:坐标点和线条粗细的小数位数。

画圆圈(cv.circle)

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
参数说明:
img: 这是你想要在其上绘制圆形的图像。它应该是一个NumPy数组,通常是通过读取图像文件或创建空图像得到的。
center: 圆形的中心坐标,是一个包含两个元素的元组或列表,分别表示x和y坐标((x, y))。
radius: 圆形的半径,以像素为单位。
color: 圆形的颜色,是一个包含三个元素的元组或列表,分别表示BGR(蓝色、绿色、红色)的强度。每个颜色的值范围从0到255。

画椭圆(cv.ellipse)

cv.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
参数说明:
img: 输入输出图像。这个图像可以是单通道灰度图像或多通道彩色图像。
center: 椭圆的中心点坐标,类型为 Point。
axes: 椭圆的长半轴和短半轴的长度,类型为 Size。注意这里的长度是以像素为单位的。
angle: 椭圆绕其中心旋转的角度,以度为单位。正值表示逆时针旋转。
startAngle 和 endAngle: 椭圆弧的起始和终止角度,以度为单位。这两个参数用于绘制椭圆的一部分,而不是整个椭圆。
color: 线条的颜色,用三通道表示(BGR格式)。
thickness: 线条的粗细,默认值为1。如果设置为-1,则表示椭圆将被填充。
lineType: 线条的类型,默认值为 LINE_8。这个参数控制线条的绘制方式,例如是否为抗锯齿等。
shift: 坐标值的小数位数。这个参数通常用于内部计算,以提高精度。用户一般不需要修改它。

画多边形

要绘制多边形,首先需要顶点的坐标。将这些点组成形状为ROWSx1x2的数组,其中ROWS是顶点数,并且其类型应为int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。

import numpy as np
import cv2 as cv

# 创建黑色的图像,大小为512x512像素,3个颜色通道(RGB)
img = np.zeros((512, 512, 3), np.uint8)


while 1:  # 创建一个无限循环,直到用户按下空格键
    # 颜色为白色,线条厚度为50
    # 创建一个NumPy数组,包含四个二维点,这些点将构成多边形的顶点
    # 数组的形状是(4, 2),其中4表示有四个点,2表示每个点有两个坐标(x, y)
    pts = np.array([[5, 15], [10, 30], [5, 40], [1, 20]], np.int32)

    # 使用reshape函数重新调整数组的形状。这里reshape的参数是(-1, 1, 2)
    # -1表示该维度的大小是自动计算的,以使得总的元素数量保持不变
    # 1表示中间增加了一个维度,现在数组的形状变成了(4, 1, 2)
    # 这意味着现在数组被视为包含4个元素,每个元素是一个1x2的数组(即一个点的坐标)
    # 这样做是因为cv.polylines函数要求点的数组是Nx1x2形状的,其中N是多边形的顶点数
    pts = pts.reshape((-1, 1, 2))

    # 使用cv.polylines函数在图像上绘制多边形
    # img是待绘制的图像
    # [pts]是将pts数组放在一个列表中,因为cv.polylines函数的第二个参数要求是一个列表的列表(即多边形的列表)
    # 这里的列表只包含一个多边形
    # True表示多边形是闭合的,即第一个点和最后一个点会自动连接
    # (0, 255, 255)是多边形的颜色,这里是青色(在BGR颜色空间中)
    cv.polylines(img, [pts], True, (0, 255, 255))

    # 显示图像
    cv.imshow('line', img)

    # 如果用户按下空格键,则退出循环
    if cv.waitKey(0) == ord(' '):
        break

    # 销毁所有OpenCV创建的窗口
cv.destroyAllWindows()

如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。 cv.polylines()可用于绘制多条线。只需创建要绘制的所有线条的列表,然后将其传递给函数即可。所有线条将单独绘制。与为每条线调用cv.line相比,绘制一组线是一种更好,更快的方法。

向图像添加文本:

# 设置字体样式为 Hershey Simplex,这是一种简单的字体  
font = cv.FONT_HERSHEY_SIMPLEX  
  
# 在图像上绘制文本  
# 参数说明:  
# img: 要绘制文本的图像  
# 'OpenCV': 要绘制的文本字符串  
# (10,500): 文本左下角的坐标(x, y)  
# font: 字体类型  
# 4: 字体大小(缩放因子)  
# (255,255,255): 文本颜色(BGR格式)  
# 2: 文本的线条粗细  
# cv.LINE_AA: 抗锯齿线条类型,用于使文本边缘更平滑  
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

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

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

相关文章

【Oracle】Oracle常用函数

目录 聚合函数数字函数1. ABS函数:返回一个数的绝对值。2. CEIL函数:返回大于等于给定数的最小整数。3. FLOOR函数:返回小于等于给定数的最大整数。4. ROUND函数:将一个数四舍五入到指定的小数位。5. MOD函数:返回两个…

swin-unet编码端流程图

文章目录 1. PatchEmbed2. swinTransformerBlock2.1. window_partition2.2. WindowAttention2.3. Window_reverse2.4. MLP 3. PatchMerging完整流程图 1. PatchEmbed 2. swinTransformerBlock 2.1. window_partition 2.2. WindowAttention 2.3. Window_reverse 2.4. MLP 3. Pat…

集成学习(三)GBDT 梯度提升树

前面学习了:集成学习(二)Boosting-CSDN博客 梯度提升树:GBDT-Gradient Boosting Decision Tree 一、介绍 作为当代众多经典算法的基础,GBDT的求解过程可谓十分精妙,它不仅开创性地舍弃了使用原始标签进行…

模型训练之数据集

我们知道人工智能的四大要素:数据、算法、算力、场景。我们训练模型离不开数据 目标 一、数据集划分 定义 数据集:训练集是一组训练数据。 样本:一组数据中一个数据 特征:反映样本在某方面的表现、属性或性质事项 训练集&#…

昇思25天学习打卡营第15天|linchenfengxue

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks )实现的一种深度学习图像转换模型,该模型是由Phillip Isola等作者在2017年CVPR上提出的,可以实现语义/标签到…

农资销售网站-计算机毕业设计源码54432

目录 摘要 Abstract 1绪论 1.1研究背景 1.2研究意义 1.3论文结构与章节安排 2农资销售网站系统分析 2.1可行性分析 2.1.1技术可行性分析 2.1.2经济可行性分析 2.1.3法律可行性分析 2.2系统功能分析 2.2.1功能性分析 2.2.2非功能性分析 2.3系统用例分析 2.4系统流…

业界数据架构的演变

目录 一、概述 二、业务处理-单体架构 三、业务处理-微服务架构 四、数据分析-大数据Lambda架构 五、数据分析-Kappa架构 六、数据分析-LambdaKappa混合架构 七、湖仓一体架构 一、概述 近年来随着越来越多的大数据技术被开源,例如:HDFS、Spark等…

数据库缓存管理

1. 简介 缓存管理器是数据库管理系统(DBMS)中负责管理内存中page并处理文件和索引管理器的page请求的组件。由于内存空间有限,我们不能将所有page存储在缓存池中。因此,缓存管理器需要制定替换策略,当空间填满时选择哪…

如何注册微信公众号

如何注册微信公众号 如何注册一个微信公众号 😊📱摘要引言正文内容1. 准备工作内容定位和受众群体公众号名称和头像 2. 网页注册流程第一步:访问微信公众平台第二步:选择账户注册类型第三步:填写基本信息第四步&#x…

视频技术助力智慧城市一网统管:视频资源整合与智能化管理

随着信息技术的飞速发展,智慧城市已成为现代城市发展的重要方向。在智慧城市建设中,一网统管作为城市管理的重要策略,通过整合各类信息资源,实现资源的优化配置和问题的快速响应。其中,视频技术作为一网统管场景中的关…

使用Livox-Mid360激光雷达,复现FAST_LIO(保姆级教程)

前面我已经完成了mid360激光雷达的驱动安装,octomap的复现,昨天我去把这俩在正式环境中实测了一下,效果不好,走廊转角没建出来,我查了一下,应该是TF的原因,但这部分我还不太懂,看到有…

利用大模型知识库,优化智能客服问答效果 | 创新场景

ITValue 痛点 SSC( Share Service Center ,共享服务中心)是企业日常接触最多的场景之一,更多是对内服务,包括 HR 、财务、IT 等。该场景对专业度要求非常高,知识点非常多,对于知识的使用者或者查…

每日一题~ leetcode 402 (贪心+单调栈)

click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数,可以先考虑删除一个数。这也是一种常见的思路。(如果进行同样的操作多次,可以先只 考虑一次操作如何实现,或者他的影响。完成这一次操作后,…

服务器数据恢复—DS5300存储raid5阵列数据恢复案例

服务器存储数据恢复环境: 某单位一台某品牌DS5300存储,1个机头4个扩展柜,50块硬盘组建2组RAID5磁盘阵列(一组raid5阵列有27块成员盘,存放Oracle数据库文件;另外一组raid5阵列有23块成员盘)。存储…

【免费资料】IEEE33节点系统参数及拓扑图visio

主要内容 对于初学配电网的同学,最经典的系统即是33节点配电网系统,在各个研究文献中出现频次最高的也是这个系统,为了让大家更好了解33节点系统参数,本次整理了系统节点、支路参数excel以及33节点网络拓扑图visio&#xff0c…

解决IDEA每次新建项目都需要重新配置maven的问题

每次打开IDEA都要重新配置maven,这是因为在DEA中分为项目设置和全局设置,这个时候我们就需要去到全局中设置maven了。我用的是IntelliJ IDEA 2023.3.4 (Ultimate Edition),以此为例。 第一步:打开一个空的IDEA,选择左…

Multisim仿真-交流数字电压表

下图为整体的原理框图,交流电源经过整流滤波电路转换后,送入模数转换电路,经译码给到显示电路,由其显示交流电源的有效值。 信号发生器XFG1输出正弦波信号(峰峰值),XMM1测量有效值,U6数码管显示有效值。仿真…

38条Web测试经验分享

1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。 LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测…

vue3【实战】来回拖拽放置图片

效果预览 技术要点 img 标签默认就是可拖拽的(a 标签也是)事件 e 内的 dataTransfer 对象可用于临时存储事件过程中的数据拖拽事件的默认行为是用浏览器新开页签打开被拖拽对象,所以通常需要禁用默认的浏览器行为被拖拽元素必须设置 id&#…

二刷力扣——单调栈

739. 每日温度 单调栈应该从栈底到栈顶 是递减的。 找下一个更大的 ,用递减单调栈,就可以确定在栈里面的每个比当前元素i小的元素,下一个更大的就是这个i,然后弹出并记录;然后当前元素i入栈,仍然满足递减…