Drawing Functions in OpenCV-OpenCV中的绘图函数-python

一、线

cv.line(image, pt1, pt2, color, thickness, lineType, shift)

image:这是要在其上绘制线条的图像,通常是numpy数组类型的图像数据。

pt1:这是线条起始点的坐标,以 (x, y) 形式的元组表示。

pt2:这是线条终点的坐标,同样以 (x, y) 形式的元组表示。

color:这是线条的颜色,通常以BGR格式的元组 (blue, green, red) 表示。例如,(255, 0, 0)代表蓝色。如果是灰度图像,则颜色由单个亮度值表示。

thickness:这是线条的粗细,以像素为单位。如果设置为-1,则会填充整个图形。

lineType:线条的类型,默认为8连接。cv2.LINE_AA为抗锯齿,这样看起来会更平滑。

shift:这个可选参数用于设置点坐标的位数偏移量,默认值为 0。

下面是示例代码

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = np.zeros((256, 256, 3), np.unit8)
cv.line(img, (0, 0), (255, 255), (255, 0, 0), 5)
plt.imshow(img[:, :, ::-1]) # matplotlib的默认颜色通道是RGB,OpneCV中是BGR

输出

 

二、矩形 

cv.rectangle(img, pt1, pt2, color, thickness, lineType, shift)

image:这是必需的输入参数,代表要进行绘图操作的目标图像(可以是 NumPy 数组或 OpenCV 的 Mat 类型)。

pt1:这也是一个必需的参数,表示矩形左下角点的坐标,通常用一个包含两个元素的一维整数数组表示,例如 (x, y)。这里的 x 是水平方向上的像素坐标,y 是垂直方向上的像素坐标。

pt2:这个参数表示矩形对角线上另一个顶点的坐标,即矩形的右上角点的坐标,同样用一个包含两个元素的一维整数数组表示,例如 (x, y)。这里的 x 是水平方向上的像素坐标,y 是垂直方向上的像素坐标。

color:这个参数代表矩形边界线的颜色。

thickness:这个参数代表矩形边框线的粗细,以像素为单位。如果设置为 -1,则将以指定的颜色填充矩形形状。

lineType:这个可选参数表示线条的类型,默认值为8,代表抗锯齿线条。其他类型的线条可以通过传递不同的值来实现,例如 cv2.LINE_AA 为抗锯齿线条,看起来会更平滑。

shift:这个可选参数用于设置点坐标的位数偏移量,默认值为 0。

下面是示例代码

cv.rectangle(img, (97, 97), (157, 157), (0, 255, 0), 3)
plt.imshow(img[:, :, ::-1])

输出

 

三、椭圆

cv.ellipse(img, center, axes, angle, startAngle, endAngle, color, 
            thickness, lineType, shift)

image:这是必须提供的参数,指代在其上绘制椭圆的目标图像,该图像可以是NumPy数组或者OpenCV的Mat类型。

center:表示椭圆的中心坐标,通常用一个包含两个元素的元组来表示,即(x, y)坐标。

axes:包含椭圆的长半轴和短半轴的长度,也是用一个元组表示。需要注意的是,这里的值是椭圆的主轴长度的一半,而不是主轴长度本身。

angle:椭圆旋转的角度,单位为度。0度表示椭圆没有旋转。

startAngle:椭圆弧起始的角度,单位为度。这是椭圆弧的起始位置,顺时针方向计算,以x轴正半轴为起点。

endAngle:椭圆弧终止的角度,单位为度。这是椭圆弧的结束位置,同样顺时针方向计算,以x轴正半轴为起点。

color:线条的颜色,用BGR格式的元组来指定。

thickness:线条的粗细,以像素为单位。如果设置为负数(如-1),则会填充整个椭圆而不是仅绘制边界线。

lineType:这是一个可选参数,它给出了椭圆边界的类型。默认值为LINE_8,代表抗锯齿线条。

shift:这是可选参数,用于设置坐标值的小数位数,默认值为0。

 下面是示例代码

cv.ellipse(img, (127, 127), (60, 30), 0, 0, 360, (0, 256, 0), 4)
plt.imshow(img[:, :, ::-1])

输出

 

四、圆 

cv.circle(img, center, radius, color, thickness, lineType, shift)

image:这是必须提供的参数,指代在其上绘制圆形的目标图像,该图像可以是NumPy数组或者OpenCV的Mat类型。

center:表示圆心的坐标,通常用一个包含两个元素的点(Point)来表示,即(x, y)坐标。

radius:圆形的半径,用整数表示。

color:指定圆形边界线的颜色。

thickness:线条的粗细,以像素为单位。如果设置为负数(如-1),则会填充整个圆形而不是仅绘制边界线。

lineType:线条类型的参数,默认为8,代表抗锯齿线条。其他类型的线条可以通过传递不同的值来实现。

shift:这是可选参数,用于设置圆心坐标点和半径值的小数点位数,默认值为0。

下面是示例代码

cv.circle(img, (127, 127), 30, (0, 256, 0), -1)
plt.imshow(img[:, :, ::-1])

 输出

五、多边形

cv.polylines(img, pts, isClosed, color, thickness, lineType, shift) 

image:这是必须提供的参数,指代在其上绘制多边形的目标图像,该图像可以是NumPy数组或者OpenCV的Mat类型。

pts:表示多边形顶点的坐标点数组。这些点定义了多边形的形状和位置。

isClosed:一个布尔值,指示绘制的多边形是否闭合。如果为True,则多边形的最后一个顶点会与第一个顶点相连,形成一个封闭的多边形;如果为False,则多边形的边不会连接起来,即多边形是开放的。

color:指定多边形边界线的颜色。

thickness:线条的粗细,以像素为单位。如果设置为负数(如-1),则会填充整个多边形而不是仅绘制边界线。

lineType:这是一个可选参数,它给出了多边形边界的类型。默认值为8,代表抗锯齿线条。其他类型的线条可以通过传递不同的值来实现。

shift:这是可选参数,用于设置坐标值的小数位数,默认值为0。

 下面是示例代码

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, 0, 255), 5)
plt.imshow(img[:, :, ::-1])

输出 

六、添加文本 

cv.putText(img, text, org, fontFace, fontScale, color[, thickness, lineType, 
bottomLeftOrigin) 

img:这是必须提供的第一个参数,指代在其上绘制文本的目标图像,该图像可以是8位或浮点型的单通道或三通道图像。

text:这是要绘制的文本内容,可以是数字、字符、字符串等。

org:表示文本的左下角坐标,用一个Point对象表示。如果bottomLeftOrigin参数为true,则org表示文本框左上角的坐标。

fontFace:字体类型,如cv.FONT_HERSHEY_PLAIN等,用于指定绘制文本时使用的字体。

fontScale:尺寸因子,值越大文字越大,用于控制文本的大小。

color:字体颜色,通常用BGR格式的元组来指定,例如(255, 255, 255)代表白色。

thickness(可选):字体线条粗细,以像素为单位,用于设置文本边框的厚度。

lineType(可选):线条类型,默认为8,代表抗锯齿线条。其他类型的线条可以通过传递不同的值来实现。

bottomLeftOrigin(可选):布尔值,如果为true,则org表示文本框左上角的坐标;如果为false(默认),则org表示文本框左下角的坐标。

下面是示例代码

font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (8, 220), font, 2, (255, 255, 255), 2, cv.LINE_AA)
plt.imshow(img[:, :, ::-1])

输出

 

## 学习笔记,欢迎各位大佬指错!  

  • 65
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值