OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
创始人
2024-05-30 00:25:32
0

学习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}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

NCE平台:美国军方警告多线冲... 5月15日,NCE平台表示,美国军方领导人警告称,由于俄罗斯、伊朗和朝鲜等国之间关系的加强,未来冲突...
第四范式:第一季度总收入10.... 转自:中国证券报·中证网中证报中证网讯(记者 孟培嘉)5月15日,第四范式发布2025财年第一季度业...
报告显示:上市银行息差持续收窄... 转自:经济日报5月13日,安永发布《中国上市银行2024年回顾及未来展望》报告。该报告深度分析了中国...
希荻微:公司部分芯片产品今年已... 每经AI快讯,5月15日,希荻微在互动平台表示,2025年,公司部分芯片产品已实现向AI眼镜客户出货...
新老IP齐发力 网易Q1游戏收... 财联社5月15日讯(记者 崔铭 实习记者 曾家奕)在《第五人格》《燕云十六声》等新老IP发力下,网易...
三川智慧5G数智工厂启航:重塑...   2025年5月14日,江西鹰潭,一场关于智慧水务未来的变革正在发生。由中国城镇供水排水协会主办的...
吴泳铭:阿里AI产品的行业渗透...   5月15日晚,在2025财年Q4及全年财报分析师电话会上,阿里巴巴集团CEO吴泳铭表示,过去一个...
读图 | 武汉武昌区开展重点城... 转自:中国环境网为动态掌握强降雨期间雨洪排口水质变化情况,近日,湖北省武汉市武昌区生态环境监测站开展...
国家卫生健康委通报关于肖某引发... 新京报讯 据国家卫健委官网消息,近日,中日友好医院胸外科肖某被其妻子举报违反生活纪律、医德医风等问题...
国家卫健委通报:吊销肖某医师执... 国家卫生健康委今天通报了关于肖某引发舆情事件调查处置进展情况。通报称,近日,中日友好医院胸外科肖某被...
金凯生科(301509.SZ)... 格隆汇5月15日丨金凯生科(301509.SZ)公布,公司股东蓝色经济区产业投资基金(有限合伙)(简...
金杯电工:主要产品为电磁线和电... 证券日报网讯金杯电工5月15日在互动平台回答投资者提问时表示,公司主要产品为电磁线和电线电缆,作为配...
2025年“一展两会”5月23... 5月15日,“2025北京国际茶业展 北京马连道国际茶文化交流会 北京泉州茶宣传推介会”新闻发布会在...
央行等四部门:全方位支持科技创... 据央行,为贯彻落实党中央、国务院关于做好科技金融的决策部署,推动《加快构建科技金融体制 有力支撑高水...
众安在线(06060)完成赎回... 众安在线(06060)公布,就6亿美元于2025年到期的3.125% 票据,发行人已于2025年5月...
突发!农行、邮储,再遭举牌!   财报季歇歇脚,险资转头继续扫货!  港交所披露易最新信息显示,平安人寿于5月9日、12日分别增持...
课时被挤占、作业靠摆拍……一些... 转自:北京日报客户端2022年秋季学期以来,单独设立的劳动课出现在中小学生的课表里。但近期“新华视点...
无证行医酿苦果 法官持盾护健康... 近日,一面绣有 “秉公执法 为民解忧” 的锦旗被郑重地送到了西安碑林法院民一庭王梦圆法官手中。锦旗背...
内蒙古远兴能源拟回购注销204... 内蒙古远兴能源(维权)股份有限公司于2025年5月15日召开2024年年度股东大会,审议通过了《关于...
今飞凯达:本轮美国关税调整对公... 证券日报网讯今飞凯达5月15日在互动平台回答投资者提问时表示,本轮美国关税调整对公司造成的影响较为有...