当前位置: 首页 > 文档资料 > OpenCV 中文文档 >

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 = 1
  • lineType:线的类型,是否 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是逆时针方向的椭圆的旋转角度。 startAngleendAngle表示从长轴顺时针方向测量的椭圆弧的起点和终点。 输入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 的图标。