OpenCV 4.11.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)
绘制一个圆。

绘制椭圆

要绘制椭圆,我们需要传递几个参数。一个参数是中心位置 (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 等。为了更好的外观,建议 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)
绘制一个文本字符串。

结果

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

图像

附加资源

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

练习

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