当前位置: 首页 > news >正文

OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。

1、画线条——line()函数

介绍:

cv2.line(image, start_point, end_point, color, thickness)

参数:

  • image: 图像
  • start_point:它是线的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
  • end_point: 它是线的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
  • color: 它是要绘制的线条的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
  • thickness: 它是线的粗细像素。

举例说明:

# 画线条
import cv2
import numpy as np
img = np.zeros((480, 640, 3),np.uint8)
cv2.line(img,(0,20),(200,380),(0,255,0),5)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述

2、画圆——circle()函数

介绍:

cv2.line(image, center, radius, color, thickness)

参数:

  • image:图像
  • center:圆心坐标
  • radius:半径
  • color:颜色
  • thickness:线段粗细

举例说明:

# 画圆
import cv2
import numpy as npcv2.circle(img,(240, 250),100,(0,255,0),5)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:

在这里插入图片描述

3、画矩形——rectangle()函数

介绍

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )

参数:

  • img:指定一张图片,在这张图片的基础上进行绘制;(img相当于一个画板)
  • pt1: 由(x_min,x_min)组成,为绘制的边框的左上角;
  • pt2: 由(x_max, y_max)坐标,为绘制的边框的右下角,示意如下:
  • color:指定边框的颜色,由(B,G,R)组成,当为(255,0,0)时为绿色,可以自由设定;
  • thinkness:线条的粗细值,为正值时代表线条的粗细(以像素为单位),为负值时边框实心;

举例说明:

# 画矩形
import cv2
import numpy as npcv2.rectangle(img,(80, 100),(380, 380),(0,0,255),10,180)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述

4、画椭圆——ellipse()函数

介绍:

cv2.ellipse(img, center, axes, rotateAngle, startAngle, endAngle, color, thickness, lineType, shift)

参数:

  • center:椭圆的圆心坐标,注意这是一个坐标值
  • axes:椭圆的长轴和短轴的长度,这是一个元组信息
  • rotateAngle:椭圆旋转的角度
  • startAngle:椭圆弧起始角度
  • endAngle:椭圆弧终止角度

OpenCV中原点在左上角,所以这里的角度是以顺时针方向计算的

举例说明:

# 画椭圆
import cv2
import numpy as npcv2.ellipse(img,(320, 240),(100, 50),0,0,360, (255, 0, 0))
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述

5、画多边形——polylines()函数的使用

介绍:

cv2.polylines(img, pts, isClosed, color, thickness, lineType, shift)

参数:

  • pts:多边形各边的坐标点组成的一个列表,是一个numpy的数组类型。这里需要是三维的。

  • isClosed:值为True或False,若为True则表示一个闭合的多边形,若为False则不闭合

举例说明:

# 画多边形(三边形)
import cv2
import numpy as np
pts = np.array([[[300, 10], [150, 100], [450, 100]]], np.int32)
# pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.uint8)
cv2.polylines(img,pts=pts, isClosed=True, color=(255, 0, 0), thickness=5)
# cv2.polylines(img,pts=pts,isClosed=True, color=(255, 255, 255), thickness=3)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述

6、绘制文本putText()函数

opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数——在图像上绘制文字。这个函数即是cv2.putText()。
介绍:

cv2.putText(img, text, pos, fontFace,fontScale,color[, thickness[, lineType[, bottomLeftOrigin]]])

参数:

  • img: 表示输入图像,允许单通道灰度图像或多通道彩色图像。
  • text:表示添加的文本字符串。
  • pos:表示文本字符串左下角坐标,(x, y)格式的元组。
  • fontFace:表示字体类型。
  • fontScale:表示字体缩放比例因子。
  • color:表示绘制直线的颜色,(b, g, r)格式的元组,或者表示灰度值的标量。
  • thickness:表示绘制直线的粗细,默认值1px, -1表示内部填充
  • lineType:表示绘制直线的线性,默认值为LINE_8。
  • bottomLeftOrigin:表示为可选参数,默认值True表示数据原点位于左下角,False表示位于左上角。

fontFace值说明:

描述
cv.FONT_HERSHEY_SIMPLEX表示正常大小无衬线字体。
cv.FONT_HERSHEY_PLAIN表示小号无衬线字体。
cv.FONT_HERSHEY_DUPLEX表示正常大小无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂。
cv.FONT_HERSHEY_COMPLEX表示正常大小有衬线字体。
cv.FONT_HERSHEY_TRIPLEX表示正常大小有衬线字体,比FONT_HERSHEY_COMPLEX更复杂。
cv.FONT_HERSHEY_COMPLEX_SMALL表示FONT_HERSHEY_COMPLEX的小译本。
cv.FONT_HERSHEY_SCRIPT_SIMPLEX表示手写风格字体。
cv.FONT_HERSHEY_SCRIPT_COMPLEX表示手写风格字体,比FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。
cv.FONT_ITALIC表示相应字体的斜体字。

lineType值说明:

描述
cv.LINE_4表示 4 邻接线型。
cv.LINE_8表示 8 邻接线型。
cv.LINE_AA表示抗锯齿线型,图像更平滑。

注意:OpenCV 不支持显示中文字符,使用 cv.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号)!!!

举例说明:

# 绘制文本cv2.putText(img, 'HELLO', (80, 200), cv2.FONT_HERSHEY_COMPLEX, 3, (0, 0, 255))
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述
这里的一条绿色的线是之前使用line函数画的一条线。

7、绘制中文

绘制中文的话需要使用我们电脑上自带的字体。一般字体都在C:\Windows\Fonts目录下,我们可以挑选一个自己想要展示的字体,然后使用ImageFont模块里面的truetype函数进行加载使用。

介绍ImageFont模块中的truetype函数:

ImageFont.truetype(filename ,   wordsize)

参数说明:
这个函数创建字体对象给ImageDraw中的text函数使用。

  • filename是字体文件的名称,通常为ttf文件,还有少数ttc文件,可以在C:\Windows\Fonts中找到。
  • Wordsize参数指定字的大小。

介绍ImageDraw模块中的Draw函数:

ImageDraw.Draw(image)

说明:
创建一个可用来对image进行操作的对象。对所有即将使用ImageDraw中操作的图片都要先进行这个对象的创建。

介绍Image模块中的fromarray函数:

Image.fromarray(np.uint8(img))

说明:
将array转换成image。
详细查看:numpy与image互转,numpy和tensor互转 (np.array,Image.fromarray ,a.numpy, torch.from_numpy)

举例说明:

# 绘制中文
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image
img = np.full((500, 200, 3), fill_value = 255, dtype = np.uint8)
font = ImageFont.truetype(r'C:\Windows\Fonts\微软雅黑\msyh.ttc', 15)
img_pil = Image.fromarray(img)
draw = ImageDraw.Draw(img_pil)
draw.text((100, 150), '你好', font=font, fill=(0, 255, 0, 0))
img = np.array(img_pil)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述

女神节了,博主在此祝各路程序媛,女神节快乐~

原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关文章:

OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍: cv2.line(image, start_point, end_point, color, thickness)参数: image: 图像start_point&#xff1a…...

性能平台数据提速之路

作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何…...

Dns域名解析服务器

前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址? 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议,用来获取域名对应的IP地址 域名解析服务器的介绍 DNS(Dom…...

关于 JavaScript 中的 Promises

在 JavaScript 中,Promise 是一个对象,它表示一个可能还不可用,但会在未来解决的值。Promises 用于处理异步操作,例如发出网络请求或访问数据库,其中结果不是立即可用的。如果你准备好了,我想开始我们的冒险…...

PMP考前冲刺题——错题集

3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品,所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门,运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...

【C++】30h速成C++从入门到精通(多态)

多态的概念多态:通俗来说就是多种心态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象,去调用同意函数,产生了不同的行为&#xff0…...

从proc文件系统中获取gateway的IP地址

在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有ip route或者route -n,其实route -n也是通过读取proc文件系统下的文件来从内核获取路由表的,但ip route是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路…...

【LeetCode】剑指 Offer(17)

目录 题目:剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer …...

MySQL索引类型

MySQL 是最流行的关系型数据库管理系统,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 索…...

你了解HashMap吗?

一、前言:面试过的人都知道,HashMap是Java程序员在面试中最最最经常被问到的一个点,可以说,不了解HashMap都不好意思说自己是做Java开发的。基本上你去面试十家公司,有七八家都会问到你HashMap。那么今天,就…...

我一个女孩子居然做了十年硬件……

2011年,一个三本大学的电子信息专业的大三女学生跟2个通信专业的大二男生组成了一组代表学校参加2011年“瑞萨杯”全国大学生电子设计大赛,很意外的获得了湖北赛区省三等奖,虽然很意外,但还是挺高兴的,毕竟第一次为喜欢…...

【Linux】编译器gcc g++和调试器gdb的使用

文章目录1.编译器gcc/g1.1C语言程序的翻译过程1.预处理2.编译3.汇编4. 链接1.2 链接方式与函数库1.动态链接与静态链接2.动态库与静态库1.3 gcc与g的使用2.调试器gdb2.1debug和release2.2gdb的安装2.3gdb的使用2.4gdb的常用指令3.总结1.编译器gcc/g 1.1C语言程序的翻译过程 1…...

高效能自动化港口数字化码头智慧港航,中国人工智能企业CIMCAI世界港航人工智能领军者,成熟港口码头人工智能产品中国人工智能企业

打造高效能自动化港口数字化码头智慧港航,中国人工智能企业CIMCAI中集飞瞳世界港航人工智能领军者,成熟港口码头人工智能产品全球顶尖AI科技CIMCAI成熟AI产品全球前三船公司及港口落地,包括全球港口/堆场智能闸口验箱,全球港口岸边…...

HTTP协议(一)

HTTP协议(一) 什么是HTTP协议 客户端连上web服务器后,如果想要获得web服务器中的某个web资源,需要遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器之间通讯的格式;基于TCP连接的传输协议&#xff…...

计算神经网络参数量Params、计算量FLOPs(亲测有效的3种方法)

1.stat(cpu统计) pip install torchstat from torchstat import statstat(model, (3, 32, 32)) #统计模型的参数量和FLOPs,(3,32,32)是输入图像的size 结果: 问题:当网络中有自定义参数时&am…...

sizeof与一维数组和二维数组

🍕博客主页:️自信不孤单 🍬文章专栏:C语言 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 sizeof与一维数组和二维数组 文章目录sizeof与一维数组和二维数组前言1. sizeof与…...

Spark UI

Spark UIExecutorsEnvironmentStorageSQLExchangeSortAggregateJobsStagesStage DAGEvent TimelineTask MetricsSummary MetricsTasks展示 Spark UI ,需要设置配置项并启动 History Server # SPARK_HOME表示Spark安装目录 ${SPAK_HOME}/sbin/start-history-server…...

windows应用(vc++2022)MFC基础到实战(2)

目录向导和资源编辑器使用 MFC 应用程序向导创建 MFC 应用程序使用类视图管理类和 Windows 消息使用资源编辑器创建和编辑资源生成 MFC 应用程序的操作1.创建一个主干应用程序。2.了解即使在不添加你自己的任何一行代码的情况下,框架和 MFC 应用程序向导也能提供的内…...

记一次反射型XSS

记一次反射型XSS1.反射型XSS1.1.前言1.2.测试过程1.3.实战演示1.3.1.输入框1.3.2.插入代码1.3.3.跳转链接2.总结1.反射型XSS 1.1.前言 关于这个反射型XSS,利用的方式除了钓鱼,可能更多的就是自娱自乐,那都说是自娱自乐了,并且对系…...

BUUCTF-[羊城杯 2020]Bytecode

题目下载:下载 这道题是一个关于python字节码的。 补充一下相关知识:https://shliang.blog.csdn.net/article/details/119676978dis --- Python 字节码反汇编器 — Python 3.7.13 文档 手工还原参考:[原创]死磕python字节码-手工还原python源码-软件逆…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...