Goal
学习用OpenCV绘制不同的几何图形。
学习这些功能:cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText() etc.
字典
在上述所有函数中,你会看到一些常见的参数如下:
- img :要在其中绘制图形的图像
- color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于blue。对于灰度,只需传递标量值。
- thickness:线或圆的厚度等。如果像圆形这样的封闭图形传递-1,它将填充形状。默认厚度= 1
- lineType:线的类型,是否8连接,抗锯齿线等。默认情况下,它是8连接的。cv2。LINE_AA提供了反锯齿线,这对于曲线来说非常棒。
画线
要画一条直线,你需要传递直线的起始坐标和结束坐标。我们将创建一个黑色的图像,并在其上从左上角到右下角画一条蓝线。
import numpy as np
import cv2
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
画矩形
要绘制矩形,您需要矩形的左上角和右下角。这次我们将在图像的右上角绘制一个绿色矩形。
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
画圆
要画一个圆,你需要它的中心坐标和半径。我们将在上面画的矩形内画一个圆。
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)
画椭圆
要绘制椭圆,我们需要传递几个参数。一个参数是中心位置(x,y)。下一个参数是轴长(长轴,短轴)。角是椭圆逆时针方向旋转的角度。起始角和结束角表示从主轴顺时针方向测量的椭圆圆弧的起始和结束。也就是说,给定值0和360表示整个椭圆。要了解更多细节,请查看cv2.ellipse()的文档。下面的例子在图像的中心绘制了一个半椭圆。
img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
画多边形
要绘制多边形,首先需要顶点的坐标。将这些点组成一个形状为ROWSx1x2的数组,其中行是顶点的数量,类型应该为int32。这里我们用黄色画了一个有四个顶点的小多边形。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))
注意:
如果第三个参数是假的,您将得到一个连接所有点的折线,而不是一个闭合的形状。
polylines()可以用来绘制多条线。只需创建一个要绘制的所有线条的列表,并将其传递给函数。所有的线将单独绘制。为每一行调用cv2.line()比绘制一组行更好更快。
添加文字
要将文本放到图像中,您需要指定以下内容。
- 要写入的文本数据。
- 位置坐标的地方,你想把它(即左下角的数据开始)。
- 字体类型(检查cv2.putText()文档是否支持字体)。
- 字体比例(指定字体大小)。
- 规则的东西,如颜色,厚度,线型等。为了更好地理解,lineType = cv2。LINE_AA推荐。
我们将用白色在图像上写OpenCV。
cv2.putText(img,'Aldeo',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
cv2.imshow('image',img)
显示图片
现在是时候看看我们的最终结果了。正如您在前几篇文章中学习的,显示图像来查看它。
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('drawing.png',img)
cv2.destroyAllWindows()
运行上面代码(按ESC键退出,按S键保存并退出),显示图片如下: