前言
-
在本小节你将学习用OpenCV绘制不同的几何图形
-
你将学习以下几个函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()
在上述所有函数中你将看到以下几个常见的参数:
-
img:用于设置要绘制形状的图像
-
color:用于设置绘制图案的颜色。对于BGR图像,将其用元组传递,例如:(255,0,0)为蓝色。对于灰度图像,只需传递标量值。
-
thickness:用于设置线条或圆形等的厚度。如果是- 1则在图案内生成闭合图案并填充颜色。这个参数的默认厚度为1。
-
lineType:用于设置线条的类型,有8型连接,抗锯齿等。默认情况是8型连接。cv2.LINE_AA为抗锯齿,这样看起来会非常平滑。
1. 绘制直线
要绘制线条,你需要传递线条的起点和终点坐标。我们将创建一个黑色图像,并在其上从左上角到右下角绘制一条蓝线。 参考以下代码:
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)
2. 绘制矩形
要绘制矩形,你需要传递矩形的左上角和右下角的坐标。这次我们将在图像的右上角绘制一个绿色矩形。 参考一下代码:
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
3. 绘制圆形
要绘制圆形,你需要传递其圆点坐标和半径,我们将在上面绘制的矩形内绘制一个圆。 参考一下代码:
cv.circle(img,(447,63), 63, (0,0,255), -1)
4. 绘制椭圆
要绘制椭圆,我们需要传递四个参数,第一个是椭圆中心位置(x,y),第二个是长轴长度和断轴长度(a,b),第三个是椭圆在逆时针方向上的旋转角度,第四个是startAngle和endAngle表示从主轴顺时针方向测量的椭圆弧的起点和终点,即给出值0和360给出完整的椭圆,给出值180则画出半个椭圆。 参考一下代码:
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
5. 绘制多边形
要绘制多边形,首先需要顶点坐标。 将这些点转换为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))
注意:如果第三个参数为False,则绘制所有点的相连图形而不是闭合图形。cv.polylines()可用于绘制多条线。 只需创建要绘制的所有行的列表并将其传递给函数。 所有线条都将单独绘制。 绘制一组行比为每行调用cv.line()要好得多,速度更快。
6. 向图像中添加文字
要将文本放入图像中,你需要传递以下几个参数:第一个是你要写入的文本数据,第二个是你要放置的位置(即文本数据的左下角),第三个是字体类型(检查cv.putText()文档以获取支持的字体),的四个是字体大小,之后还有一些常规的参数,比如颜色、粗细、线型等,为了更好看,建议使用lineType = cv.LINE_AA作为线型参数的值。
我们将在图像上编写白色的OpenCV字样。 参考以下代码:
font = cv.FONT_HERSHEY_SIMPLEXcv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
7. 结果
是时候看看我们所绘制图案的结果了,正如文章之间所讲述的那样,通过显示图像将上面六个绘制结果显示出来。 窗口将如下图所示: