当前位置: 首页 > 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源码-软件逆…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...