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}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。相关推荐
- OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()
OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>usi ...
- OpenCV-Python教程:绘制直线、圆形、方形(line,circle,rectangle)
原文链接:http://www.juzicode.com/archives/5323 返回Opencv-Python教程 因为绘图操作需要用到起点.终点坐标等参数,绘图前需要先了解在OpenCV中图像 ...
- Opencv基础画图函数——line、circle、rectangle、Rect、ellipse、polylines、putText函数的用法
目录 1.line函数 2.circle函数 3.rectangle.Rect函数 4.ellipse函数 5.polylines函数 6.随机初始化颜色 7.putText函数 总结 1.line函 ...
- OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...
- OpenCV 3 drawing rectangle - 绘制 rectangle
OpenCV 3 drawing rectangle - 绘制 rectangle OpenCV documentation index - OpenCV 文档索引 https://www.docs. ...
- 显示一张桌子的信息,包括桌子的形状(长方形、方形、圆形、椭圆形;使用Rect、Square、Circle、Ellipse)、腿数、高度、桌面面积。定义变量来保存桌子的信息,并显示各个信息的值。要点提示
[问题描述] 显示一张桌子的信息,包括桌子的形状(长方形.方形.圆形.椭圆形:使用Rect.Square.Circle.Ellipse).腿数.高度.桌面面积.定义变量来保存桌子的信息,并显示各个信息 ...
- SwiftUI - Shape(Circle, Rectangle,RoundedRectangle,Capsule,Path)
文章目录 Circle, Rectangle RoundedRectangle Capsule Path https://developer.apple.com/documentation/swift ...
- 设计一个圆类(circle),内有私有成员radius代表半径, 函数get_radius( )用于获得半径、area( )用于计算圆的面积; (2)定义一个桌子类table,内有私有数据h
1.(1)设计一个圆类(circle),内有私有成员radius代表半径, 函数get_radius( )用于获得半径.area( )用于计算圆的面积: (2)定义一个桌子类table,内有私有数据h ...
- 线圆示例(Line Circle)
线圆示例(Line Circle) 示例 HTML CSS JS 更多有趣示例 尽在知屋安砖社区 示例 HTML <script src="https://cdnjs.cloudfla ...
最新文章
- python爬取下拉列表数据_Python怎么爬取下拉式的网页?
- UML类图与类的关系详解
- IT民工——全世界最齐全的条形码库!包括Code128/Code93/Code39/EAN13等22种条形码
- 使用kali的工具攻击win10_使用“媒体创建工具”制作Win10系统安装U盘
- Vue + Element UI 实现 登陆注册基本demo实例
- 内核提速开机linux,Linux操作系统开机启动提速方法介绍。
- 函数节流你应该知道的那点事
- Ubuntu 20.04配置FTP服务方法(非匿名登录)
- canvas动画之三 -- 黑客帝国文字掉落效果
- 电机及计算机工程,伍斯特理工学院电机与计算机工程理学/工程学硕士研究生申请要求及申请材料要求清单...
- softice使用(1)- 在VMware Workstation 中使用SoftICE zz xfocus
- 华硕笔记本(GTX 1060显卡)安装Ubuntu16.04+Nvidia显卡驱动+Cuda8.0+cudnn6.0+ROS+Opencv3.2+Caffe+Tensorflow
- 【vue】配置cdn加速
- XXL-Job Docker部署
- 1080Ti+windows7和1080Ti+windows10的区别
- vue项目-后台管理系统
- 思杰desktop7.6申请90天试用的License
- docker安装nginx kong konga
- Handler中MessageQueue的enqueueMessage笔记
- .nii格式文件python_python处理nii格式文件
热门文章