目录
前言
目标
函数详解
1、cv2.line()画线
2、cv2.rectangle()画矩形
3、cv2.circle()画圆
4、cv2.ellipse()画椭圆
5、cv2.polylines()画多边形
6、cv2.putText()绘制文本
代码演示
运行效果
参考
跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展!
掌握基本绘图函数 cv2.line() , cv2.cicle() , cv2.rectangle() , cv2.ellipse() , cv2.putText()的使用。
主要参数介绍
color: 形状的颜色,以RGB为例,需要传入的元组,例(255,0,0)代表蓝色,对于灰度图只需传入灰度值
thickness: 线条的粗细,如果给一个闭合图形设置为 -1 ,那么这个图形就会被填充,默认值为1
linetype: 线条的类型: 填充,4连通,8连接,抗锯齿等。默认是8连接。cv2.LINE_AA为抗锯齿,显示线条更平滑(代码演示中有对比)。
cv.FILLED 填充
cv.LINE_4 4连通线
cv.LINE_8 8连通线
cv.LINE_AA 抗锯齿线
cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img 图像.
pt1 线段的第一个点.
pt2 线段的第二个点.
color 线条颜色.
thickness 线条粗细.
lineType 线条类型.
shift 坐标的小数位数
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img 图像.
pt1 矩形的顶点.
pt2 与pt1相对的矩形顶点.
color 矩形颜色或亮度(灰度图像).
thickness 构成矩形的线条的粗细(如果为正数)。负值(如 FILLED)表示函数必须绘制填充矩形.
lineType 线路类型. See LineTypes
shift 点坐标的小数位数
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
img 图像.
center 圆心.
radius 圆的半径.
color 圆的颜色.
thickness 圆轮廓的粗细(如果为正)。负值,如 FILLED,表示要绘制一个填充的圆.
lineType 圆边界的类型.
shift 圆心坐标和半径值的小数位数
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)
img 图像.
center 椭圆的中心.
axes 椭圆主轴尺寸的一半.
angle 椭圆旋转角度(以度为单位).
startAngle 椭圆弧的起始角度(以度为单位).
endAngle 椭圆弧的结束角(以度为单位).
color 椭圆颜色.
thickness 椭圆弧轮廓的厚度(如果为正)。否则,这表示要绘制填充的椭圆扇区.
lineType 椭圆边界的类型.
shift 中心坐标和轴长的小数位数
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
img 图像.
pts 多边形曲线数组.
isClosed 指示绘制的折线是否闭合的标志。如果它们闭合,则该函数将绘制一条从每条曲线的最后一个顶点到其第一个顶点的线.
color 折线颜色.
thickness 折线边的厚度.
lineType 线段的类型. See LineTypes
shift 顶点坐标中的小数位数.
需要指定每个顶点的坐标,构建一个大小相等于行数*1*2的数组,行数就是点的数目,这个数组必须为int32。
可以用来画很多条线。只要把想画的线放在一个集合中并传给函数就可以了,每条线会独立绘制,会比用 cv2.line() 一条一条的绘制快一些。
cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
img 图像.
text 要绘制的文本字符串.
org 图像中文本字符串的左下角.
fontFace 字体类型.
fontScale 字体比例因子乘以特定于字体的基本大小.
color 文本颜色.
thickness 用于绘制文本的线条粗细.
lineType 线型.
bottomLeftOrigin 如果为 true,则文本起点坐标位于左下角。否则,它位于左上角(字体呈现上下翻转).
import cv2
import numpy as np
import cv2
winname='example'
cv2.namedWindow(winname)
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# 线,Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(255,0,0),5)
# 矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
# 圆,-1为向内填充
cv2.circle(img,(447,63), 63, (0,0,255), -1)
# 椭圆,
cv2.ellipse(img,(256,256),(100,50),50,0,180,255,-1)
# 多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255)) # 第3个参数若为False,则结果为不闭合的线
# 文字,
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'A',(10,200), font, 4,(255,255,255),2,cv2.FILLED,False)
cv2.putText(img,'A',(10,300), font, 4,(255,255,255),2,cv2.LINE_4,False)
cv2.putText(img,'A',(10,400), font, 4,(255,255,255),2,cv2.LINE_8,False)
cv2.putText(img,'A',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA,False)
# 显示
cv2.imshow(winname,img)
cv2.waitKey(0)
cv2.destroyWindow(winname)
下图为代码运行效果,图中的字母“A”,采用了不同的linetype绘制,可以看出cv2.LINE_AA抗锯齿类型,显示线条更平滑,更常用。
OpenCV: OpenCV-Python Tutorials
学习、进步、坚持。。。内容不间断更新中。。。