OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
OpenCV 中的绘图函数

目标

代码

在上述所有函数中,您将看到一些常见的参数,如下所示

  • img:您要在其上绘制形状的图像
  • color:形状的颜色。对于 BGR,将其作为元组传递,例如:(255,0,0) 表示蓝色。对于灰度,只需传递标量值。
  • thickness:线条或圆形等的粗细。如果为闭合图形(如圆形)传递 -1,它将填充形状。默认粗细 = 1
  • lineType:线条类型,无论是 8 连接、抗锯齿线等。默认情况下,它是 8 连接的。 cv.LINE_AA 提供抗锯齿线,这对于曲线来说看起来很棒。

绘制线条

要绘制一条线,您需要传递线的起始和结束坐标。我们将创建一个黑色图像,并在其上绘制一条从左上角到右下角的蓝色线条。

import numpy as np
import cv2 as cv
# 创建一个黑色图像
img = np.zeros((512,512,3), np.uint8)
# 绘制一条粗细为 5 像素的对角蓝色线条
cv.line(img,(0,0),(511,511),(255,0,0),5)
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制连接两点的线段。

绘制矩形

要绘制一个矩形,您需要矩形的左上角和右下角。这次我们将在图像的右上角绘制一个绿色矩形。

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制一个简单、粗或填充的矩形。

绘制圆形

要绘制一个圆,您需要它的中心坐标和半径。我们将在上面绘制的矩形内绘制一个圆。

cv.circle(img,(447,63), 63, (0,0,255), -1)
void circle(InputOutputArray img, Point center, int radius, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a circle.

绘制椭圆

要绘制椭圆,我们需要传递几个参数。一个参数是中心位置 (x,y)。下一个参数是轴长(长轴长度、短轴长度)。angle 是椭圆逆时针旋转的角度。startAngle 和 endAngle 表示从长轴开始顺时针测量的椭圆弧的起始和结束。即,给定值 0 和 360 会给出完整的椭圆。有关更多详细信息,请查看 cv.ellipse() 的文档。以下示例在图像中心绘制一个半椭圆。

cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制简单或粗椭圆弧或填充椭圆扇区。

绘制多边形

要绘制一个多边形,首先您需要顶点的坐标。将这些点制成形状为 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))
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制多条多边形曲线。
注意
如果第三个参数为 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)
void putText(InputOutputArray img, const String &text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=LINE_8, bool bottomLeftOrigin=false)
绘制文本字符串。

结果

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

image

附加资源

  1. 椭圆函数中使用的角度不是我们的圆角。有关更多详细信息,请访问 此讨论

练习

  1. 尝试使用 OpenCV 中可用的绘图函数创建 OpenCV 的徽标。