目标
代码
在上面所说的函数中主要用到参数如下:
img: 要绘制形状的图像 color: 形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)表示蓝色。对于灰度,只需传递标量值即可 thickness:线或圆等的厚度。如果**-1**对于封闭的图形如圆,它将填充形状。缺省thickness=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)
画矩形
要绘制矩形,需要矩形的左上角和右下角.这一次,我们将画一个绿色的矩形在右上角的图像.
#画矩形
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
画圆
要画一个圆,你需要它的中心坐标和半径。我们将在上面画的矩形内画一个圆圈。
#画圆
cv.circle(img,(447,63), 63, (0,0,255), -1)
画椭圆
要绘制椭圆,我们需要传递几个参数。一个参数是中心位置(x,y)。下一个参数是轴长(长轴长、短轴长)。角是椭圆逆时针方向旋转的角度.起始角和端角表示从长轴顺时针方向测量的椭圆弧的开始和结束。也就是说,给定值0和360表示整个椭圆。有关更多细节,请查看cv.ellipse() 的文档。下面的例子在图像的中心画一个半椭圆
#画椭圆
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
画边形
要绘制多边形,首先需要顶点的坐标。将这些点变成一个ROWSx1x2形状数组,其中行是顶点的数目,并且应该是int 32类型。在这里,我们画了一个小多边形的四个顶点黄色。
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.polyline()可用于绘制多条线。只需创建要绘制的所有线条的列表,并将其传递给函数。所有的线都将单独划出。这是一种比为每一行调用cv.line()更好和更快的绘制一组线条的方法。
向图像添加文本:
要将文本放入图像中,需要指定以下内容:
要写入的文本数据 要放置它的位置坐标(即数据开始的左下角)。 字体类型(选中cv.putText()docs以获得支持的字体) 字体刻度(指定字体大小) 为了更好的外观,推荐使用 lineType = cv.LINE_AA
我们将在图像上写白色的OpenCV。
结果
看看我们画的最后结果了。
追:
椭圆函数中使用的角度不是我们的圆角。有关更多细节,请访问此 this discussion 讨论。
练习:
尝试使用OpenCV中可用的绘图功能创建OpenCV的徽标。