返回介绍

2.3 OpenCV 中的绘图函数

发布于 2019-07-01 11:38:49 字数 2681 浏览 1229 评论 0 收藏 0

目标

  • 学习如何在 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 的图标。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文