OpenCV 绘图函数:在图像上绘制线条、矩形和圆形等形状

本文介绍了如何使用OpenCV库在图像上绘制线条、矩形、圆形、椭圆和多边形,详细解析了相关函数的参数及其用法,包括cv.line()、cv.rectangle()、cv.circle()、cv.ellipse()和cv.polylines()。通过实例展示了如何在图像上添加几何形状和文本。
摘要由CSDN通过智能技术生成

目录

目标

代码

画线

绘制矩形

画圈

绘制椭圆

绘制多边形

结果


注,各个效果图,后续补充

目标

代码

在上述所有绘图函数中,您将看到一些常见的参数,包括:

  • img:要绘制形状的图像
  • 颜色:形状的颜色。对于 BGR,将其作为元组传递,例如:(255, 0, 0) 表示蓝色。对于灰度,只需传递标量值。
  • thickness:线或圆等形状的粗细。对于封闭图形,如果将其设置为-1,则会填充形状。默认厚度为1。
  • lineType:线路类型,可以设置为8连线、抗锯齿线等。默认为8连线。cv.LINE_AA表示抗锯齿线,它看起来很适合曲线的绘制。

画线

要绘制一条线,您需要指定线的起点和终点坐标。下面是一个示例,我们将创建一个黑色图像,并在其上绘制一条蓝线,该线从左上角到右下角延伸。

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)

这行代码使用了 OpenCV 中的 cv.line() 函数,用于在图像上绘制一条直线。具体来说,它的参数如下:

  • img:要绘制直线的图像,可以是空白图像。
  • (0, 0):直线的起点坐标,这里是 (0, 0),即图像的左上角。
  • (511, 511):直线的终点坐标,这里是 (511, 511),即图像的右下角。
  • (255, 0, 0):直线的颜色,这里是蓝色,用 BGR 格式表示为 (255, 0, 0)
  • 5:直线的宽度,即粗细程度,这里是 5 个像素。

因此,该行代码的作用是在一个大小为 512x512 的空白图像上绘制一条从左上角到右下角的蓝色线条。

绘制矩形

要绘制矩形,您需要指定矩形的左上角和右下角坐标。下面是一个示例,我们将在图像的右上角绘制一个绿色矩形:

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)

这行代码使用了 OpenCV 中的 cv.rectangle() 函数,用于在图像上绘制一个矩形。具体来说,它的参数如下:

  • img:要绘制矩形的图像。
  • (384,0):矩形左上角的坐标。
  • (510,128):矩形右下角的坐标。
  • (0,255,0):矩形的颜色,这里是绿色,用 BGR 格式表示为 (0,255,0)
  • 3:矩形的线宽,即边框粗细程度,这里是 3 个像素。

因此,该行代码的作用是在给定图像上绘制一个左上角坐标为 (384,0),右下角坐标为 (510,128),颜色为绿色,边框宽度为 3 个像素的矩形。

画圈

要绘制圆,您需要指定圆心坐标和半径。下面是一个示例,我们将在前面绘制的矩形内绘制一个圆形:

cv.circle (img,(447,63), 63, (0,0,255), -1)

绘制椭圆

要绘制椭圆,需要传递几个参数。其中一个是中心位置 (x,y),另外两个参数是轴的长度(长轴和短轴长度)。此外,angle 表示椭圆沿逆时针方向旋转的角度,而 startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点,如果指定的值为 0 和 360,则会绘制整个椭圆。有关更多信息,请参阅cv.ellipse()函数的文档。下面是一个示例,在图像的中心绘制了一个半椭圆:

cv.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))
cv.polylines (img,[pts], True ,(0,255,255))

如果将 cv.polylines() 函数的第三个参数设置为 False,则将绘制一条连接所有点的折线,而不是封闭的形状。

另外,cv.polylines() 函数也可用于绘制多条线。只需创建一个包含所有要绘制的线条的列表并将其传递给函数即可。所有线条都将单独绘制。与为每条线条分别调用 cv.line() 函数相比,这种方法可以更好更快地绘制一组线条。

要将文本添加到图像中,需要指定以下内容:

  • 要写入的文本数据
  • 要放置文本的位置坐标(即数据开始的左下角坐标)
  • 字体类型(查看 cv.putText() 函数的文档以了解支持的字体)
  • 字体比例(指定字体的大小)
  • 其它常规选项,如颜色、线条粗细、线型等。为了让文本更美观,建议使用 lineType = cv.LINE_AA。

下面是一个示例,我们在图像上使用白色字体写上 OpenCV:

font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

结果

所以是时候看看我们绘图的最终结果了。正如您在以前的文章中学习的那样,显示图像以查看它。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快撑死的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值