一、直线
cv2.line(img=*,pt1=*,pt2=*,color=*,thickness=*,lineType=LINE_8)
img:绘图的背景(画布)。
pt1、pt2:始/终点坐标,格式为元组()。
color:直线颜色,BGR格式。
thickness:线宽,默认为:1。
lineType:线条样式。默认为LINE_8。
import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画三条线,连接成三角形
cv2.line(img=res,pt1=(20,20),pt2=(180,20),color=(255,0,0),thickness=2)
cv2.line(img=res,pt1=(180,20),pt2=(180,180),color=(0,255,0),thickness=2)
cv2.line(img=res,pt1=(180,180),pt2=(20,20),color=(0,0,255),thickness=2)
cv2.imshow('line',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、矩形
cv2.rectangle(img=*,pt1=*,pt2=*,color=*,thickness=*,lineType=LINE_8)
pt1、pt2:矩形的左上角和右下角坐标,格式为元组()。
import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画矩形
cv2.rectangle(img=res,pt1=(20,20),pt2=(180,180),color=(255,0,0))
cv2.rectangle(img=res,pt1=(50,50),pt2=(150,150),color=(255,0,0))
cv2.rectangle(img=res,pt1=(80,80),pt2=(120,120),color=(255,0,0))
cv2.imshow('rectangle',res)
cv2.imwrite('rectangle.png',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、圆
cv2.circle(img=*,center=*,radius=*,color=*,thickness=*,lineType=LINE_8)
img:绘图的背景(画布)。
center:圆的中心点坐标,格式为元组()。
radius:圆的半径。
color:直线颜色,BGR格式。
thickness:线宽,默认为:1。-1 表示实心圆
lineType:线条样式。默认为LINE_8。
import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画圆
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=80,color=(255,0,0)) # 空心
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=50,color=(255,0,0)) # 空心
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=30,color=(255,0,0),thickness=-1) #实心
cv2.imshow('circle',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、椭圆
cv2.ellipse(img=*,center=*,axes=*,angle=*,startAngle=*,endAngle=*,color=*,thickness=*,lineType=LINE_8)
center:椭圆的中心点坐标,格式为元组()。
axes:轴的长度。
angle:椭圆偏移角度(长轴与X轴的夹角)。
startAngle,endAngle:始/终点的角度0~360。
import cv2
import numpy as np
from numpy.ma.core import arange
# 建立一个(400,400)白色画布
res = np.ones((400,400,3),dtype=np.uint8)*255
# 在白色画布上画椭圆
for i in arange(0,360,30): # 每隔30度画一个椭圆
color = np.random.randint(0,255,3).tolist() # 生成随机色彩
cv2.ellipse(img=res,center=(200,200),axes=(80,150),angle=i,startAngle=0,endAngle=360,color=color)
cv2.imshow('ellipse',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
五、多边形
cv2.polylines(img=*,pts=*,isClosed=*,color=*,thickness=*,lineType=LINE_8)
pts:含多边形顶点坐标的Numpy数组 list[]。 点的坐标顺序很重要
isClosed:是否封闭,首尾点的坐标相连。
import cv2
import numpy as np
from numpy.ma.core import arange
# 建立一个(200,400)白色画布
res = np.ones((200,400,3),dtype=np.uint8)*255
# 在白色画布上画多边形
pts1=np.array([[50,50],[150,50],[150,150],[50,150]])
pts2=np.array([[250,50],[350,50],[350,150],[250,150]])
cv2.polylines(img=res,pts=[pts1],isClosed=True,color=(255,0,0)) # 封闭
cv2.polylines(img=res,pts=[pts2],isClosed=False,color=(0,0,255)) # 开放
cv2.imshow('ploylines',res)
cv2.waitKey(0)
cv2.destroyAllWindows()