跳转至

绘图功能

画线

画直线只需指定起点和终点的坐标就行:

# 加载图片
img = cv2.imread('img/lena.jpg')
# 画一条线宽为5的蓝色直线,参数2:起点,参数3:终点
cv2.line(img, (0, 0), (512, 512), (255, 0, 0), 5)

经验之谈:所有绘图函数均会直接影响原图片,这点要注意。

画矩形

画矩形需要知道左上角和右下角的坐标:

# 画一个绿色边框的矩形,参数2:左上角坐标,参数3:右下角坐标
cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

画圆

画圆需要指定圆心和半径,注意下面的例子中线宽=-1代表填充:

# 画一个填充红色的圆,参数2:圆心坐标,参数3:半径
cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)

画椭圆

画椭圆需要的参数比较多,请对照后面的代码理解这几个参数:

  • 参数2:椭圆中心(x,y)
  • 参数3:x/y轴的长度
  • 参数4:angle---椭圆的旋转角度
  • 参数5:startAngle---椭圆的起始角度
  • 参数6:endAngle---椭圆的结束角度

经验之谈:OpenCV中原点在左上角,所以这里的角度是以顺时针方向计算的。

# 在图中心画一个填充的半圆
cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, (255, 0, 0), -1)

画多边形

画多边形需要指定一系列多边形的顶点坐标,相当于从第一个点到第二个点画直线,再从第二个点到第三个点画直线....

OpenCV中需要先将多边形的顶点坐标需要变成顶点数×1×2维的矩阵,再来绘制:

# 定义四个顶点坐标
pts = np.array([[10, 5],  [50, 10], [70, 20], [20, 30]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 255, 255))

cv2.polylines()的参数3如果是False的话,多边形就不闭合。

经验之谈:如果需要绘制多条直线,使用cv2.polylines()要比cv2.line()高效很多,例如:

# 使用cv2.polylines()画多条直线
line1 = np.array([[100, 20],  [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60],  [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100],  [300, 100]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))