目标
代码
在上述所有函数中,您将看到一些常见的参数,如下所示
- img:您要在其上绘制形状的图像
- color:形状的颜色。对于 BGR,将其作为元组传递,例如:(255,0,0) 表示蓝色。对于灰度,只需传递标量值。
- thickness:线条或圆形等的粗细。如果为闭合图形(如圆形)传递 -1,它将填充形状。默认粗细 = 1
- lineType:线条类型,无论是 8 连接、抗锯齿线等。默认情况下,它是 8 连接的。 cv.LINE_AA 提供抗锯齿线,这对于曲线来说看起来很棒。
绘制线条
要绘制一条线,您需要传递线的起始和结束坐标。我们将创建一个黑色图像,并在其上绘制一条从左上角到右下角的蓝色线条。
import numpy as np
import cv2 as cv
img = np.zeros((512,512,3), np.uint8)
cv.line(img,(0,0),(511,511),(255,0,0),5)
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制连接两点的线段。
绘制矩形
要绘制一个矩形,您需要矩形的左上角和右下角。这次我们将在图像的右上角绘制一个绿色矩形。
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制一个简单、粗或填充的矩形。
绘制圆形
要绘制一个圆,您需要它的中心坐标和半径。我们将在上面绘制的矩形内绘制一个圆。
void circle(InputOutputArray img, Point center, int radius, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a circle.
绘制椭圆
要绘制椭圆,我们需要传递几个参数。一个参数是中心位置 (x,y)。下一个参数是轴长(长轴长度、短轴长度)。angle 是椭圆逆时针旋转的角度。startAngle 和 endAngle 表示从长轴开始顺时针测量的椭圆弧的起始和结束。即,给定值 0 和 360 会给出完整的椭圆。有关更多详细信息,请查看 cv.ellipse() 的文档。以下示例在图像中心绘制一个半椭圆。
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制简单或粗椭圆弧或填充椭圆扇区。
绘制多边形
要绘制一个多边形,首先您需要顶点的坐标。将这些点制成形状为 ROWSx1x2 的数组,其中 ROWS 是顶点数,并且应该是 int32 类型。这里我们用黄色绘制一个带有四个顶点的小多边形。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制多条多边形曲线。
- 注意
- 如果第三个参数为 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)
void putText(InputOutputArray img, const String &text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=LINE_8, bool bottomLeftOrigin=false)
绘制文本字符串。
结果
现在是时候看看我们绘画的最终结果了。正如您在前几篇文章中所学的那样,显示图像以查看它。
image
附加资源
- 椭圆函数中使用的角度不是我们的圆角。有关更多详细信息,请访问 此讨论。
练习
- 尝试使用 OpenCV 中可用的绘图函数创建 OpenCV 的徽标。