1.画线
line(img,开始点,结束点,颜色,...)
img:在那个图像上画线
开始点、结束点:指定线的开始与结束位置
颜色、线宽、线型
shift:按坐标缩放比例,一般不需要该参数
需要注意坐标为(x,y)
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)
cv2.line(img,(10,20),(300,400),(0,0,255),5,4) #画线坐标为(x,y) 5为线宽,4为线型锯齿(只能取-1 4 8 16)
cv2.imshow('draw',img)
cv2.waitKey(0)
2.画矩形
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
img:要画的圆所在的矩形或图像
pt1:矩形左上角的点
pt2:矩形右下角的点
color:线条颜色,如 (0, 0, 255) 红色,BGR
thickness:线条宽度
lineType:
8 (or omitted) : 8-connected line
4:4-connected line
CV_AA - antialiased line
shift:坐标点小数点位数
#画矩形,-1为矩阵填充,不加不填充
cv2.rectangle(img,(10,10),(100,100),(0,0,255),-1)
3.画圆
圆心,半径
#画圆,100为圆的半径
cv2.circle(img,(320,240),100,(0,0,255))
cv2.circle(img,(320,240),5,(0,0,255),-1) #实心圆
4.画椭圆
ellipse(img,中心点,长宽的一半,角度,从那个角度开始,到那个角度结束,...)
角度指长方体的角度
#画椭圆,0度是从右侧计算的
#cv2.ellipse(img,(320,240),(100,50),0,0,360,(0,0,255)) #第一个0为长方形的角度
#cv2.ellipse(img,(320,240),(100,50),0,0,180,(0,0,255)) #第一个0为长方形的角度,180°为椭圆的一半,顺时针计算
#cv2.ellipse(img,(320,240),(100,50),90,0,360,(0,0,255)) #相当于椭圆从0度旋转为90度
cv2.ellipse(img,(320,240),(100,50),15,0,360,(0,0,255),-1) #通过不断调整可以画出不同的图形
5.画多边形
ploylines(img,点集,是否闭环,颜色,...)
点集必须要保证为32位,填充方式与上面不同
填充多边形API:fillPoly(img,点集,颜色)
#画多边形,点集通过numpy创建,类型必须为32位,且为int型
pts = np.array([(300,10),(150,100),(450,100)],np.int32) #作为一个列表把参数传递给下面
cv2.polylines(img,[pts],True,(0,0,255)) #True代表多边形闭合
cv2.fillPoly(img,[pts],(255,200,0)) #多边形填充
6.绘制文本
putText(img,字符串,起始点,字体,字号,...)
可用字体类型
#绘制文本,不能显示中文!
cv2.putText(img,"wenbences",(10,400),cv2.FONT_HERSHEY_DUPLEX,2,(255,0,0))
以上示例完整程序:
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)
#画线坐标为(x,y) 5为线宽,4为线型锯齿(只能取-1 4 8 16)
#cv2.line(img,(10,20),(300,400),(0,0,255),5,4)
#画矩形,-1为矩阵填充,不加不填充
cv2.rectangle(img,(10,10),(100,100),(0,0,255),-1)
#画圆,100为圆的半径
cv2.circle(img,(320,240),100,(0,0,255))
cv2.circle(img,(320,240),5,(0,0,255),-1) #实心圆
#画椭圆,0度是从右侧计算的
#cv2.ellipse(img,(320,240),(100,50),0,0,360,(0,0,255)) #第一个0为长方形的角度
#cv2.ellipse(img,(320,240),(100,50),0,0,180,(0,0,255)) #第一个0为长方形的角度,180°为椭圆的一半,顺时针计算
#cv2.ellipse(img,(320,240),(100,50),90,0,360,(0,0,255)) #相当于椭圆从0度旋转为90度
cv2.ellipse(img,(320,240),(100,50),15,0,360,(0,0,255),-1) #通过不断调整可以画出不同的图形
#画多边形,点集通过numpy创建,类型必须为32位,且为int型
pts = np.array([(300,10),(150,100),(450,100)],np.int32) #作为一个列表把参数传递给下面
cv2.polylines(img,[pts],True,(0,0,255)) #True代表多边形闭合
cv2.fillPoly(img,[pts],(255,200,0)) #多边形填充
#绘制文本,不能显示中文!
cv2.putText(img,"wenbences",(10,400),cv2.FONT_HERSHEY_DUPLEX,2,(255,0,0))
cv2.imshow('draw',img)
cv2.waitKey(0)