2.3 OpenCV 中的绘图函数
优质
小牛编辑
132浏览
2023-12-01
目标
- 学习如何在 OpenCV 中绘制不同的几何图形
- 你将会学到这些函数:
cv2.line()
、cv2.circle()
、cv2.rectangle()
、cv2.ellipse()
,cv2.putText()
等
代码
在上面的所有函数中,您将看到如下所示的一些常见参数:
img
:要在其上绘制图形的图像color
:图形的颜色。 对于 BGR 图像,将其作为元组传递,例如:(255,0,0)为蓝色。 对于灰度图像,只需传递标量值即可。thickness
:线或圆的粗细等。如果在绘制像圆这样的闭合图形时传递-1,将会填充满图形。 默认thickness = 1lineType
:线的类型,是否 8-connected,反锯齿等。默认为 8-connected。cv2.LINE_AA
表示反锯齿的曲线,效果看起来很棒。
绘制线条
要绘制线条,你需要向函数中传入线条的起始和结束坐标。 我们将创建一个黑色的图像,并从左上角到右下角画一条蓝线。
import numpy as np
import cv2
# 创建黑色图片
img = np.zeros((512,512,3), np.uint8)
# 绘制宽为5px的蓝色对角线
cv2.line(img,(0,0),(511,511),(255,0,0),5)
绘制矩形
要绘制矩形,需要向函数中传入矩形的左上角和右下角。 这一次,我们将在图像的右上角画一个绿色的矩形。
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
绘制圆
要绘制一个圆,您需要它的中心坐标和半径。 我们将在上面绘制的矩形内绘制一个圆。
cv2.circle(img,(447,63), 63, (0,0,255), -1)
绘制椭圆
为了绘制椭圆,我们需要传递几个参数。 第一个参数是中心位置(x,y)。
第二个参数是轴长度:(长轴长度,短轴长度)。 angle
是逆时针方向的椭圆的旋转角度。 startAngle
和endAngle
表示从长轴顺时针方向测量的椭圆弧的起点和终点。 输入0和360将给出完整的椭圆。 有关更多详细信息,请查看cv2.ellipse()
的文档。 下面的示例在图像的中心绘制一个只有一半的椭圆。
cv2.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))
cv2.polylines(img,[pts],True,(0,255,255))
如果第三个参数是False,你将会得到一个连接所有点的多段线,而不是一个闭合的形状。
cv2.polylines()
可以用来绘制多段线。 只要创建一个你想绘制的所有线的列表,并将其传递给函数。 所有线路都将被单独绘制。 绘制一组线比每段线都调用一次cv2.line()
要快得多。
向图片中增加文字
要在图像中放置文本,您需要指定以下内容。
- 你想写的文本数据
- 要放置的位置坐标(文字位置的左下角)。
- 字体类型(阅读
cv2.putText()
文档来查看支持的字体) - 字体大小
- 常规的东西,如颜色,厚度,线型等。为了更好的显示效果,推荐使用
lineType = cv2.LINE_AA
。
我们将在图像上写下白色的 OpenCV。
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
更多资源
椭圆函数中使用的角度和通常理解的角度有所不同。 有关更多详细信息,请访问此讨论。
练习
试着用 OpenCV 中的绘图函数画一个 OpenCV 的图标。