1.4 任务3:几何图形绘制
1.4.1 任务描述
基于龙芯平台,利用OpenCV的相关函数实现常用的几何图形绘制。
1.4.2 技术准备
在图像处理中,我们经常需要将某个感兴趣的区域用图形标注出来,以便在开发时观察和调试,尤其是在进行物体检测与物体跟踪时,绘图是必不可少的操作。OpenCV提供了一系列的几何图形绘制函数,可以实现在图像中绘制线段、矩形、圆形、椭圆形、多边形、文本等功能。
1.line()函数
line()函数用于绘制线段,其基本格式如下。
cv2.line(img, start_point, end_point, color, thickness=0)
参数如下。
● img:指定需要绘制的图像。
● start_point:指定线段的起始坐标,必须是元组类型。
● end_point:指定线段的结束坐标,必须是元组类型。
● color:指定线条的颜色,必须是元组类型,通常使用BGR颜色值表示颜色,如(255, 0, 0)表示红色。
● thickness:指定线条的宽度,默认值为1,若设置为−1,表示绘制填充图形。
2.rectangle()函数
rectangle()函数用于绘制矩形,其基本格式如下。
cv2.rectangle(img, point1, point2, color, thickness=0)
参数如下。
● img:指定需要绘制的图像。
● point1:指定矩形左上角顶点的坐标,必须是元组类型。
● point2:指定矩形右下角顶点的坐标,必须是元组类型。
● color:指定线条的颜色,必须是元组类型。
● thickness:指定线条的宽度。
注意,该函数每调用一次,就会产生一个矩形,多次调用就会产生多个矩形。
3.circle()函数
circle()函数用于绘制圆形,其基本格式如下。
cv2.circle(img, center, R, color, thickness=0)
参数如下。
● img:指定需要绘制的图像。
● center:指定圆心坐标,必须是元组类型。
● R:指定圆形的半径。
● color:指定线条的颜色,必须是元组类型。
● thickness:指定线条的宽度。
4.ellipse()函数
ellipse()函数用于绘制椭圆形,其基本格式如下。
cv2.ellipse(img, center, (a, b), direction, angle_start, angle_end, color, thickness)
参数如下。
● img:指定需要绘制的图像。
● center:指定椭圆形的中心坐标。
● (a,b):指定椭圆形的长轴和短轴。
● direction:指定顺时针方向的旋转角度。
● angle_start:指定绘制椭圆形开始的角度。
● angle_end:指定绘制椭圆形结束的角度。
● color:指定线条的颜色。
● thickness:指定线条的宽度。
5.polylines()函数
polylines()函数用于绘制多边形,其基本格式如下。
cv2.polylines(img, pts, isClosed, color, thickness=0)
参数如下。
● img:指定需要绘制的图像。
● pts:指定点的坐标集合,一般以列表的形式填入。
● isClosed:指定多边形是否闭合。若它为False,表示不闭合;若为True,表示闭合。
● color:指定线条的颜色。
● thickness:指定线条的宽度。
6.putText()函数
putText()函数用于绘制文本,其基本格式如下。
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType)
参数如下。
● img:指定需要添加文字的背景图。
● text:指定需要添加的文字。
● org:指定添加文字的位置。
● fontFace:指定字体。
● fontScale:指定字号大小。
● color:指定文字的颜色。
● thickness:指定线条的宽度。
● lineType:指定线条的种类。
1.4.3 任务实施
利用OpenCV的相关函数进行几何图形绘制的代码如下。
import cv2 import numpy as np # 创建一张图片 img = np.ones((500, 500, 3), np.uint8) # 绘制线段 cv2.line(img, (60, 240), (220, 240), BGR(0, 0, 255):红色, 3, cv2.LINE_AA) cv2.line(img, (140, 160), (140, 320), BGR(0, 0, 255):红色, 3, cv2.LINE_AA) # 绘制矩形 cv2.rectangle(img, (100, 200), (180, 280), (0, 255, 255), 3, cv2.LINE_AA) cv2.rectangle(img, (80, 180), (200, 300), (0, 255, 255), 3, cv2.LINE_AA) cv2.rectangle(img, (60, 160), (220, 320), (0, 255, 255), 3, cv2.LINE_AA) # 绘制圆形 cv2.circle(img, (140, 240), 80, (255, 255, 0), 2, cv2.LINE_AA) cv2.circle(img, (140, 240), 60, (255, 255, 0), 2, cv2.LINE_AA) cv2.circle(img, (140, 240), 40, (255, 255, 0), 2, cv2.LINE_AA) # 绘制椭圆形 cv2.ellipse(img, (140, 80), (100, 50), 0, 0, 360, (0, 255, 0), 2, cv2.LINE_AA) cv2.ellipse(img, (140, 80), (90, 40), 0, 0, 90, (255, 0, 0), 2, cv2.LINE_AA) cv2.ellipse(img, (140, 80), (90, 40), 0, 270, 360, (0, 255, 0), 2, cv2.LINE_AA) cv2.ellipse(img, (140, 80), (80, 30), 0, 0, 90, (0, 255, 0), 2, cv2.LINE_AA) cv2.ellipse(img, (140, 80), (80, 30), 0, 270, 360, (255, 255, 0), 2, cv2.LINE_AA) cv2.ellipse(img, (140, 80), (70, 20), 0, 90, 270, (255, 255, 0), 2, cv2.LINE_AA) # 绘制多边形 pts = np.array([[400, 100], [300, 140], [450, 250], [350, 250]], np.int32) cv2.polylines(img, [pts], True, (0, 0, 255), 1, cv2.LINE_AA) # 绘制文字 cv2.putText(img, 'loongson Platform: OpenCV', (0, 450), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,0),4) cv2.imshow("Image ", img) cv2.waitKey(0)
几何图形绘制结果如图1-5所示。
▲图1-5 几何图形绘制结果