1.创建画布,numpy.ones(shape, dtype=float, order=‘C’)

这个函数不是opencv自带的,而是numpy里面的,需要在函数开头导入,就像是导入opencv的库cv2一样。

import numpy as np//别名取为np
import cv2

取了别名之后,创建单色画布就变成了np.ones(shape, dtype=float, order=‘C’),每个参数的意思是

参数 类型 含义 示例值 备注
shape tuple 数组形状 (512, 512, 3) (高度, 宽度, 通道数)
dtype type 数据类型 np.uint8 像素值类型

最后的参数order=‘C’,是用来控制行优先还是列优先的,我们使用的时候省略即可,不需要写他,默认就是C。

通道数 名称 含义 数据形状 应用场景
1通道 灰度图 只有亮度信息 (高, 宽) 黑白照片、文档扫描
3通道 彩色图 RGB/BGR颜色 (高, 宽, 3) 普通彩色照片
4通道 带透明度 RGB + Alpha (高, 宽, 4) PNG透明图、游戏素材

不是每个设备都支持4通道的,但是几乎所有的设备都支持1 3通道。并且4通道绘图也比较复杂。

实际上画布是不止只有这个类型的函数,但是ones最通用,我就直说他了。

使用示例:

  black_img = np.ones((100, 100, 3), np.uint8) * 0    # 全0 = 黑色
  white_img = np.ones((100, 100, 3), np.uint8) * 255  # 全255 = 白色
  gray_img = np.ones((100, 100, 3), np.uint8) * 128   # 全128 = 灰色

2.画线, cv2.line(img, pt1, pt2, color, thickness=1, lineType=8, shift=0)和 cv2.polylines(img, pts, isClosed, color, thickness=1, lineType=8, shift=0)

cv2.line

很明显是用来画线的,各个参数含义如下。

参数 类型 含义 当前值 可选值/范围 默认值
img numpy.ndarray 目标图像 img 任何有效图像数组 -
pt1 tuple 起始点坐标 (0, 0) (x, y) 整数坐标 -
pt2 tuple 结束点坐标 (511, 511) (x, y) 整数坐标 -
color tuple 线条颜色 (255, 0, 0) BGR值或灰度值 -
thickness int 线条粗细 5 1-255 像素 1
lineType int 线条类型 (省略) 8, 4, cv2.LINE_AA 8
shift int 坐标精度 (省略) 0-16 0

cv2.line()函数特点:

1. 原地修改:直接改变输入图像
2. 精确控制:坐标、颜色、粗细全可控
3.  高效绘制:C++底层实现,速度快
4. 灵活参数:支持抗锯齿、亚像素精度

调用非常简单,要注意这个函数是直接修改原图像,不会返回一个新图像。

使用示例:

cv2.line(img, pt1=(0, 0), pt2=(511, 511), color=(255, 0, 0), thickness=5)

cv2.polylines

它就是上一个函数的pro版本,可以一次性连多根线。下面是对应的参数列表。

参数 类型 是否必需 默认值 含义 示例
img numpy.ndarray ✅ 必需 - 目标图像 img
pts list[numpy.ndarray] ✅ 必需 - 点集列表 [shape1, shape2]
isClosed bool ✅ 必需 - 是否闭合 True/False
color tuple ✅ 必需 - 线条颜色 (255, 0, 0)
thickness int ❌ 可选 1 线条粗细 2
lineType int ❌ 可选 8 线条类型 cv2.LINE_AA
shift int ❌ 可选 0 坐标精度 0

调用这个函数的时候,它会把同一个点集的点,按照顺序依次连接,至于第一个点和最后一个点是否相连,取决于参数isClosed。注意了,不同点集的点是独立的,不会相连。

特别注意了,这是一个复杂绘图函数,它所需要的点集不是简单的(),()。必须是通过np.array转换得来的点集。

3.常用绘图,箭头,矩形,圆

箭头线条, cv2.arrowedLine(img, pt1, pt2, color, thickness=1, line_type=8, shift=0, tipLength=0.1)

用来画箭头,从pt1起始点指向pt2结束点。

参数 类型 是否必需 默认值 含义 示例值
img numpy.ndarray ✅ 必需 - 目标图像 img
pt1 tuple ✅ 必需 - 箭头起始点 (21, 13)
pt2 tuple ✅ 必需 - 箭头指向的终点 (151, 401)
color tuple/int ✅ 必需 - 线条颜色 (255, 0, 0)
thickness int ❌ 可省略 1 线条粗细(像素) 5
line_type int ❌ 可省略 8 线条类型 cv2.LINE_AA
shift int ❌ 可省略 0 坐标精度位移 0
tipLength float ❌ 可省略 0.1 箭头长度相对比例 0.1

示例

cv2.arrowedLine(img,pt1=(21, 13), pt2=(151, 401), color=(255, 0, 0), thickness=5)
矩形,cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=8, shift=0)

用来画矩形,pt1是左上角的那个点,pt2是右下角的那个点。

参数 类型 是否必需 默认值 含义 示例值
img numpy.ndarray ✅ 必需 - 目标图像 img
pt1 tuple ✅ 必需 - 矩形左上角坐标 (384, 0)
pt2 tuple ✅ 必需 - 矩形右下角坐标 (510, 128)
color tuple/int ✅ 必需 - 边框/填充颜色 (0, 255, 0)
thickness int ❌ 可省略 1 边框粗细,-1为填充 3
lineType int ❌ 可省略 8 线条类型 cv2.LINE_AA
shift int ❌ 可省略 0 坐标精度位移 0
圆形,cv2.circle(img, center, radius, color, thickness=1, lineType=8, shift=0)
参数 类型 是否必需 默认值 含义 示例值
img numpy.ndarray ✅ 必需 - 目标图像 img
center tuple ✅ 必需 - 圆心坐标 (447, 63)
radius int ✅ 必需 - 圆的半径(像素) 63
color tuple/int ✅ 必需 - 边框/填充颜色 (0, 0, 255)
thickness int ❌ 可省略 1 边框粗细,-1为填充 -1
lineType int ❌ 可省略 8 线条类型 cv2.LINE_AA
shift int ❌ 可省略 0 坐标精度位移 0

4.写字, cv2.putText(img, text, org, fontFace, fontScale, color, thickness=1, lineType=8, bottomLeftOrigin=False)

顾名思义,用来写文本的函数。

参数 类型 是否必需 默认值 含义 示例值
img numpy.ndarray ✅ 必需 - 目标图像 img
text str ✅ 必需 - 要绘制的文字内容 ‘OpenCV’
org tuple ✅ 必需 - 文字位置坐标 (10, 500)
fontFace int ✅ 必需 - 字体类型 cv2.FONT_HERSHEY_SIMPLEX
fontScale float ✅ 必需 - 字体缩放因子 4
color tuple/int ✅ 必需 - 文字颜色 (255, 255, 255)
thickness int ❌ 可选 1 文字线条粗细 2
lineType int ❌ 可选 8 线条类型 cv2.LINE_AA
bottomLeftOrigin bool ❌ 可选 False 坐标系原点位置 True

所有可用字体:

字体常量 数值 效果描述 适用场景
FONT_HERSHEY_SIMPLEX 0 正常大小sans-serif字体 最常用,清晰易读
FONT_HERSHEY_PLAIN 1 小号sans-serif字体 节省空间
FONT_HERSHEY_DUPLEX 2 正常大小sans-serif字体 比SIMPLEX稍粗
FONT_HERSHEY_COMPLEX 3 正常大小serif字体 正式文档
FONT_HERSHEY_TRIPLEX 4 正常大小serif字体 更正式
FONT_HERSHEY_COMPLEX_SMALL 5 小号serif字体 小字标注
FONT_HERSHEY_SCRIPT_SIMPLEX 6 手写风格字体 艺术效果
FONT_HERSHEY_SCRIPT_COMPLEX 7 复杂手写风格字体 装饰性文字
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐