OpenCV-13绘制多边形和文本

一、画多边形

使用API polylines绘制多边形。

polylines(img, pts, isClose, color, thickness, lineType, shift)

其中:

pts:表示多边形的点集,(需要使用集合来表示,且必须是int32位及以上)

isColse:判断是否多边形是否闭合,如果闭合则线段连在一起;不闭合则是断开的。

示例代码如下:

import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图
pts = np.array([(200, 100), (150, 300), (350, 400)])
img2 = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图

cv2.polylines(img, [pts], False, (0, 255, 0), 5, 16)
cv2.polylines(img2, [pts], True, (0, 255, 0), 5, 16)
# Opencv读取的行和列与numpy相反


cv2.imshow("line", img)
cv2.imshow("line2", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

主要注意pts是三维的。 

输出结果如下:

不闭合的效果:

闭合的效果: 

 

二、填充多边形

使用API cv2.fillPoly()

与polylines相比,缺少isColse,因为为百分百闭合。

follPloy(img, pts, isClose, color, thickness, lineType, shift)

示例代码如下:

import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图
pts = np.array([(200, 100), (150, 300), (350, 400)])

cv2.fillPoly(img, [pts], (0, 0, 255), 4)
cv2.imshow("line", img)


cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

三、绘制文本及中文文本

cv2.putText(img,text,org,fontFace,color,thickness,lineType,[bottomleftOrigin])

text:表示绘制的文本

org:文本在图片中的左下角坐标(即文字从哪个坐标开始)

fontFace:字体类型

fontScale:字体大小

示例代码如下:

import cv2
import numpy as np


img = np.zeros((480, 640, 3), np.uint8)   # 创建一个全黑的背景图
cv2.putText(img, "Hello OpenCV", (200, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255))

cv2.imshow("line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

但是,当输出的文本为中文时,会报错,因此OpenCV无法直接绘制中文。

如果需要绘制中文,可以使用Pillow包。

打开C盘,在以下路径中找到字体文件:C:\Windows\Fonts

将需要的中文字体Copy到程序的子目录中。

示例代码如下:

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image  # 导入字体形状,字体绘制和图像


img = np.full((400, 520, 3), fill_value=255, dtype=np.uint8)   # 创建一个480P的白底背景图

# 导入字体  第一个参数为字体类型,第二个参数为字体大小
font = ImageFont.truetype("./SIMYOU.TTF", 30)

# 创建一个pillow的图片
img_pill = Image.fromarray(img)
# 将创建好的图片绘制出来
draw = ImageDraw.Draw(img_pill)
# 利用draw去绘制中文
draw.text((150, 180), "大家好", font = font, fill=(0, 0, 255))
# 重新变回ndarray
img = np.array(img_pill)
cv2.imshow("text", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

OpenCV无法实现绘制中文文本,因此通过Pillow绘制再转化为ndarray的格式用OpenCV的形式显示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel报表框架(ExcelReport)极简化解决复杂报表导出问题

Excel Report 耗费了半个月的时间,终于在元旦这三天把报表框架开发完成了,使用该框架你可以非常方便的导出复杂的Excel报表。 项目开源地址: GiteeGithub 前言 不知道各位在使用POI开发报表导出过程中遇到过以下的情况: 频繁…

集成电路模拟设计——【基于Serdes 应用的 串化/解串器 时钟与数据恢复电路CDR】

串化/解串器 & 时钟与数据恢复电路CDR(可提供实现过程、仿真波形与具体参数细节 本文内容摘要背景串化/解串器全速树形串化器半速树形串化器全速移位寄存器串化器多级树形解串器 PLL型CDR整体架构实现结果 Bang-Bang型CDR整体架构 PS/PI型CDR电路PS电路设计PI电…

DDD+SOA的事件驱动微服务读写分离架构

DDD DDD是Eric Evans于2003年出版的书名,同时也是这个架构设计方法名的起源 Eric Evans “领域驱动设计之父”,世界杰出软件建模专家。 他创建了Domain Language公司,致力于帮助公司机构创建与业务紧密相关的软件。 他在世界各地宣讲领域驱动…

排序算法之插入排序c++

介绍 插入排序:将数组分成“已排序”和“未排序”两部分。初始时,已排序的部分 包含一个元素,然后从未排序的部分中取出元素,并在已排序的部分中找 到合适的位置进行插入,并保持已排序的部分一直有序。 重复这个过程&…

计算机网络学习笔记(一)

文章目录 1.1 请介绍七层网络体系结构。2 .请介绍五层网络体系结构。3 .了解网络编程协议吗?客户端发送给服务器的请求,怎么确定具体的协议?4. TCP、HTTP、FTP分别属于哪一层?5. 讲一下TCP/IP协议。6 .说一说你对ARP协议的理解。7…

IDC发布23Q3中国存储市场报告:浪潮信息逆势增长位居前二!

近日,权威调研机构IDC公布《中国企业级外部存储市场跟踪报告,2023Q3》。报告显示,2023年第三季度,中国企业级存储(ESS)市场规模达17.1亿美元,同比下降2.8%。其中,浪潮信息存销售额同比增长10.9%&#xff0c…

论文阅读: Semantics-guided Triplet Loss

ICCV 2021 Abstract 一个度量学习方法,通过浏览语义引导的局部集合去优化内在深度表示。一个新颖的特征融合模块能有效利用跨模态特异质特征。 Senantics-guided Triplet Loss 基本假设: 在场景语义分割图像中,目标内部相邻像素拥有同样…

速通C语言第十二站 文件操作

系列文章目录 速通C语言系列 速通C语言第一站 一篇博客带你初识C语言 http://t.csdn.cn/N57xl 速通C语言第二站 一篇博客带你搞定分支循环 http://t.csdn.cn/Uwn7W 速通C语言第三站 一篇博客带你搞定函数 http://t.csdn.cn/bfrUM 速通C语言第四站 一篇博客带…

FL Studio Producer Edition 21.2.2中文版所有插件版及使用教程

FL Studio 21.2.2中文版惯称水果编曲, 是一个完整的电音软件音乐制作环境或数字音频工作站。是现在流行的数字音频工作站之一,包括撰写,整理,记录,编辑,电音,混音和掌握专业品质的音乐。 FL Studio Producer Edition 21.2.2.3914 所有插件版是一款功能强大的软件音乐制作环境或…

第三十七周周报:文献阅读+掩码、多头注意力机制+位置编码

目录 摘要 Abstract 文献阅读:基于注意力的LSTM大地震预报网络 现有问题 提出方法 基于注意力的LSTM网络 研究实验 实验目的 数据集 评估指标 数据预处理和特征提取 结果讨论 Masked Self-Attention(掩码自注意力) Muti-Head S…

oracle 9i10g编程艺术-读书笔记2

配置Statspack 安装Statspack需要用internal身份登陆,或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet登陆到服务器。 select instance_name,host_name,version,startup_time from v$instance;检查数据文件路径及磁盘空间&…

Primavera Unifier 项目控制延伸:Phase Gate理论:3/3

继续上一篇阶段Gate的具体内容 https://campin.blog.csdn.net/article/details/127827681https://campin.blog.csdn.net/article/details/127827681 阶段 3 研发 前述阶段的计划和安排都要在研发阶段执行起来,同时,最重要的产品设计和开发部分也需要在…

“TypeError: Cannot read properties of null (reading ‘getContext‘)“

目录 一、报错截图 二、使用场景 三、代码截图 四、报错原因 五、解决办法 一、报错截图 二、使用场景 第一次在vue项目种使用canvas,跟着网上教程做,标签canvas写好了,dom元素获取了,简单“画”了一下,运行之后报…

前端显示json格式化

实现效果 在前端页面上展示格式化的JSON数据可以通过以下步骤完成: 获取JSON数据:首先,你需要获取要展示的JSON数据。你可以从后端API获取数据,或者直接在前端定义一个JSON对象。 格式化JSON:使用JavaScript的JSON对…

电池管理系统BMS中SOC算法通俗解析(二)

下面简单介绍下我们BMS保护板使用的SOC估算方法。我们算法的主要是针对电流积分法计算SOC的局限性进行改进: ●电池包第一次上电使用开路电压法估算SOC。第一次上电,根据电池包厂家给出的电压和剩余容量二维关系图大概估算出目前电池包的剩余容量即SOC。…

音视频技术开发周刊 | 326

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 全球最强「开源版Gemini」诞生!全能多模态模型Emu2登热榜,多项任务刷新SOTA 最强的全能多模态模型来了!就在近日,智源研究院…

ES6之Proxy详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

2024年第一天,先送一波福利!

▼最近直播超级多,预约保你有收获 近期直播:《LLM在电商搜索系统的应用案例实战》 —1— 2024 AIGC 技术体系领取福利 2023年是当之无愧的生成式 AI 元年,AIGC 的崛起深刻改变了我们的工作和生活,让我们看到了未来无限的可能性&am…

gzip引入后node_modules中.cache compression-webpack-plugin占用内存过多

1.Gzip Gzip(GNU zip)是一种常见的文件压缩格式和压缩算法,通常用于在 Web 服务器上对静态资源文件进行压缩,以减小文件大小并加快文件传输速度。在前端开发中,经常会使用 Gzip 压缩来优化网站的性能。 Gzip 压缩通过…

2024校招测试工程师笔试——经典错题记录和解析

大家好,这篇文章记录几个测开方向经典的例题,并给出相应解析,欢迎给出你的看法 下列关于软件性能测试的说法中,正确的是:( ) A 性能测试的目的不是为了发现软件缺陷 B 压力测试与负载测试的目的…
最新文章