【基础】绘图基础

OpenCV提供了绘制直线的函数cv2.line()、绘制矩形的函数cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的函数cv2.ellipse()、绘制多边形的函数cv2.polylines()、在图像内添加文字的函数cv2.putText()等多种绘图函数。

这些绘图函数有一些共有的参数,主要用于设置源图像、颜色、线条属性等,下面对这些共有参数做简单的介绍。

  • img:在其上面绘制图形的载体图像(绘图的容器载体,也称为画布、画板)

  • color:绘制形状的颜色。通常使用BGR模型表示颜色,例如,(0, 0, 255)表示红色。对于灰度图像,只能传入灰度值。需要注意,颜色通道的顺序是BGR,而不是RGB

  • thickness:线条的粗细。默认值是1

  • lineType:线条的类型,默认是8连接类型。lineType参数的值及说明如下表:

参数 说明
cv2.FILLED 填充
cv2.LINE_4 4连接类型
cv2.LINE_8 8连接类型
cv2.LINE_AA 抗锯齿,让线条更平滑

1. 绘制直线

OpenCV提供了函数cv2.line()用来绘制直线(线段)。该函数的语法格式为:

img = cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
  • img,color,thickness,lineType如上所述

  • pt1:线段起点

  • pt2:线段终点

程序演示

使用cv2.line()函数在一个黑色背景图像内绘制三条线段:

image.png
import cv2
import numpy as np

img = np.zeros((500 + 1, 500 + 1, 3), dtype=np.uint8)

img = cv2.line(img, (0, 0), (500, 500), (0, 255, 0), 1)
img = cv2.line(img, (0, 500), (500, 0), (255, 0, 0), 3)
img = cv2.line(img, (0, 250), (500, 250), (0, 0, 255), 5)

cv2.imshow('cv2.line()', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

2. 绘制矩形

OpenCV提供了函数cv2.rectangle()用来绘制矩形。该函数的语法格式为:

img = cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

● pt1为矩形顶点。

● pt2为矩形中与pt1对角的顶点。

程序演示

使用函数cv2.rectangle()在一个白色背景图像内绘制一个实心矩形

import cv2
import numpy as np

img = np.ones((500 + 1, 500 + 1, 3), dtype=np.uint8) * 255

img = cv2.rectangle(img, (100, 100), (300, 300), (255, 0, 0), 3)

cv2.imshow('cv2.rectangle()', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

3. 绘制圆形

OpenCV提供了函数cv2.circle()用来绘制圆。该函数的语法格式为:

img = cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])

● center为圆心。

● radius为半径。 [ˈreɪdiəs]

程序演示

绘制一个圆。

import cv2
import numpy as np

img = np.ones((500 + 1, 500 + 1, 3), dtype=np.uint8) * 255

img = cv2.circle(img, (250, 250), 10, (0, 0, 255), 2)
img = cv2.circle(img, (250, 250), 50, (255, 0, 0), 2)
img = cv2.circle(img, (250, 250), 75, (255, 0, 0), 2)
img = cv2.circle(img, (250, 250), 100, (255, 0, 0), 2)

cv2.imshow('cv2.circle()', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

4. 绘制椭圆

OpenCV提供了函数cv2.ellipse()用来绘制椭圆。该函数的语法格式为:

img = cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

center为椭圆的圆心坐标

axes为轴的长度,它包含两个变量的元组,分别包含椭圆的长轴和短轴(长轴长度,短轴长度)

angle椭圆旋转角度,以度为单位。

startAngle为圆弧起始角的角度

endAngle为圆弧终结角的角度

程序演示

import cv2
import numpy as np

img = np.ones((500 + 1, 500 + 1, 3), dtype=np.uint8) * 255

img = cv2.ellipse(img, (round(img.shape[0] / 2), round(img.shape[1] / 2)), (200, 100), 0, 0, 360, 2)

cv2.imshow('cv2.ellipse()', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

5. 绘制多边形

OpenCV提供了函数cv2.polylines()用来绘制多边形。该函数的语法格式为:

img = cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])

● pts为多边形的各个顶点

● isClosed为闭合标记,用来指示多边形是否是封闭的。若该值为True,则将最后一个点与第一个点连接,让多边形闭合;否则,仅仅将各个点依次连接起来,构成一条曲线。

程序演示

使用函数cv2.polylines()在一个白色背景图像内绘制一个多边形

import cv2
import numpy as np

img = np.ones((500 + 1, 500 + 1, 3), dtype=np.uint8) * 255

pts = np.array([[200, 50], [300, 200], [200, 350], [100, 200]], np.int32)

img = cv2.polylines(img, [pts], True, (0, 0, 255), 5)

cv2.imshow('cv2.polylines()', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

6. 绘制文字

OpenCV提供了函数cv2.putText()用来在图形上绘制文字。该函数的语法格式为:

img = cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

● text为要绘制的字体。

● org为绘制字体的位置,以文字的左下角为起点。

● fontFace表示字体类型,如下表所示:

image.png

● fontScale表示字体大小。

● bottomLeftOrigin用于控制文字的方向。默认值为False,当设置为True时,文字是垂直镜像的效果。

程序演示

使用函数cv2.putText()在一个白色背景图像内绘制文字。

import cv2
import numpy as np

img = np.ones((500 + 1, 500 + 1, 3), dtype=np.uint8) * 255

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img, 'openCV', (0, 50), font, 1, (0, 0, 255), 1)
cv2.putText(img, 'openCV', (0, 100), font, 2, (0, 255, 0), 2)
cv2.putText(img, 'openCV', (0, 200), font, 3, (255, 0, 0), 3)

cv2.imshow('img', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
image.png