目录
注,各个效果图,后续补充
目标
- 学习使用 OpenCV 绘制不同的几何形状
- 您将学习这些函数:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()等。
代码
在上述所有绘图函数中,您将看到一些常见的参数,包括:
- img:要绘制形状的图像
- 颜色:形状的颜色。对于 BGR,将其作为元组传递,例如:(255, 0, 0) 表示蓝色。对于灰度,只需传递标量值。
- thickness:线或圆等形状的粗细。对于封闭图形,如果将其设置为-1,则会填充形状。默认厚度为1。
- lineType:线路类型,可以设置为8连线、抗锯齿线等。默认为8连线。cv.LINE_AA表示抗锯齿线,它看起来很适合曲线的绘制。
画线
要绘制一条线,您需要指定线的起点和终点坐标。下面是一个示例,我们将创建一个黑色图像,并在其上绘制一条蓝线,该线从左上角到右下角延伸。
import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
这行代码使用了 OpenCV 中的
cv.line()
函数,用于在图像上绘制一条直线。具体来说,它的参数如下:
img
:要绘制直线的图像,可以是空白图像。(0, 0)
:直线的起点坐标,这里是(0, 0)
,即图像的左上角。(511, 511)
:直线的终点坐标,这里是(511, 511)
,即图像的右下角。(255, 0, 0)
:直线的颜色,这里是蓝色,用 BGR 格式表示为(255, 0, 0)
。5
:直线的宽度,即粗细程度,这里是 5 个像素。因此,该行代码的作用是在一个大小为 512x512 的空白图像上绘制一条从左上角到右下角的蓝色线条。
绘制矩形
要绘制矩形,您需要指定矩形的左上角和右下角坐标。下面是一个示例,我们将在图像的右上角绘制一个绿色矩形:
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
这行代码使用了 OpenCV 中的
cv.rectangle()
函数,用于在图像上绘制一个矩形。具体来说,它的参数如下:
img
:要绘制矩形的图像。(384,0)
:矩形左上角的坐标。(510,128)
:矩形右下角的坐标。(0,255,0)
:矩形的颜色,这里是绿色,用 BGR 格式表示为(0,255,0)
。3
:矩形的线宽,即边框粗细程度,这里是 3 个像素。因此,该行代码的作用是在给定图像上绘制一个左上角坐标为
(384,0)
,右下角坐标为(510,128)
,颜色为绿色,边框宽度为 3 个像素的矩形。
画圈
要绘制圆,您需要指定圆心坐标和半径。下面是一个示例,我们将在前面绘制的矩形内绘制一个圆形:
cv.circle (img,(447,63), 63, (0,0,255), -1)
绘制椭圆
要绘制椭圆,需要传递几个参数。其中一个是中心位置 (x,y),另外两个参数是轴的长度(长轴和短轴长度)。此外,angle 表示椭圆沿逆时针方向旋转的角度,而 startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点,如果指定的值为 0 和 360,则会绘制整个椭圆。有关更多信息,请参阅cv.ellipse()函数的文档。下面是一个示例,在图像的中心绘制了一个半椭圆:
cv.ellipse (img,(256,256),(100,50),0,0,180,255,-1)
绘制多边形
要绘制多边形,首先需要指定多边形的各个顶点的坐标,然后将这些点放入形状为 ROWSx1x2 的数组中,其中 ROWS 是顶点数,应为 int32 类型。下面是一个示例,我们在图像上绘制了一个带有四个黄色顶点的小多边形:
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines (img,[pts], True ,(0,255,255))
如果将 cv.polylines() 函数的第三个参数设置为 False,则将绘制一条连接所有点的折线,而不是封闭的形状。
另外,cv.polylines() 函数也可用于绘制多条线。只需创建一个包含所有要绘制的线条的列表并将其传递给函数即可。所有线条都将单独绘制。与为每条线条分别调用 cv.line() 函数相比,这种方法可以更好更快地绘制一组线条。
要将文本添加到图像中,需要指定以下内容:
- 要写入的文本数据
- 要放置文本的位置坐标(即数据开始的左下角坐标)
- 字体类型(查看 cv.putText() 函数的文档以了解支持的字体)
- 字体比例(指定字体的大小)
- 其它常规选项,如颜色、线条粗细、线型等。为了让文本更美观,建议使用 lineType = cv.LINE_AA。
下面是一个示例,我们在图像上使用白色字体写上 OpenCV:
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
结果
所以是时候看看我们绘图的最终结果了。正如您在以前的文章中学习的那样,显示图像以查看它。