本文主要说明如何在图像上添加标注信息,包括:
- 在图像上画线
- 在图像上画圆圈和实心圆
- 在图像上画矩形
- 在图像上画文本
1、在图像上画线 cv2.line
1.1 函数定义
python
复制代码
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
| 参数 |
类型 |
说明 |
| img |
NumPy 数组 |
|
| pt1 |
tuple (x1, y1) |
直线起点坐标(x 坐标,y 坐标) |
| pt2 |
tuple (x2, y2) |
直线终点坐标(x 坐标,y 坐标) |
| color |
tuple |
颜色值,BGR 格式,灰度图中为单个整数 |
| thickness |
int (可选) |
线条粗细(像素),默认为 1,负值(如 -1)表示填充(对多边形有用,但对 line 无实际意义) |
| lineType |
int (可选) |
线型 cv2.LINE_8:8-连通线(默认); cv2.LINE_4:4-连通线; cv2.LINE_AA:抗锯齿线(推荐用于平滑线条) |
| shift |
整数(可选) |
坐标点的小数位数,默认为0,用于亚像素精度绘制 |
1、颜色顺序是 BGR,对于RGB 颜色,下列代码可以进行转换
color_rgb = (0, 255, 255)
color_bgr = color_rgb[::-1]
2、图像必须可修改:确保传入的图像是可写的
img.flags['WRITEABLE'] == True
1.2 代码示例
python
复制代码
import cv2
import numpy as np
import os
# 1.读取图像
img_path = "img/dog.jpg"
if not os.path.exists(img_path):
raise FileNotFoundError(f"未找到图像文件{img_path}")
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
# 2.画线条
pointFrom = (100, 100) # 起点坐标
pointTo = (300, 300) # 终点坐标
color = (0, 0, 255) # 颜色
thickness = 2 # 线条粗细
cv2.line(img, pointFrom, pointTo, color, thickness, lineType=cv2.LINE_AA)
cv2.imshow('Draw Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、在图像上画圆圈和实心圆 cv2.circle
2.1 函数定义
复制代码
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
| 参数 |
类型 |
说明 |
| img |
NumPy 数组 |
|
| center |
元组 (x, y) |
圆心坐标,格式为 (x, y),其中 x 是列方向(宽度),y 是行方向(高度) |
| radius |
整数或浮点数 |
圆的半径(单位:像素),非负值。 |
| color |
tuple |
颜色值,BGR 格式,灰度图中为单个整数 |
| thickness |
整数(可选) |
圆轮廓的粗细(像素数),默认值为 1: 正数:仅绘制边框 -1 或负数:填充整个圆(实心圆) |
| lineType |
枚举值(可选) |
线条类型,控制渲染质量: cv2.LINE_8:8-邻接(默认) cv2.LINE_4:4-邻接 cv2.LINE_AA:抗锯齿线,用于高质量显示 |
| shift |
整数(可选) |
圆心坐标和半径值中的小数位数(默认=0),用于亚像素精度绘制 |
2.2代码示例
python
复制代码
# 2.画圆圈
# 圆心
circle_center = (200,200)
# 半径
radius =100
color = (0, 0, 255) # 颜色
thickness = 2 # 线条粗细
cv2.circle(img, circle_center, radius, color, thickness, lineType=cv2.LINE_AA)
3、在图像上画矩形cv2.rectangle
3.1 函数定义
复制代码
cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)
| 参数 |
类型 |
说明 |
| img |
NumPy 数组 |
|
| pt1 |
元组 (x1, y1) |
矩形的左上角顶点坐标,格式为 (x, y)(列, 行) |
| pt2 |
元组 (x2, y2) |
矩形的右下角顶点坐标 |
| color |
tuple |
颜色值,BGR 格式,灰度图中为单个整数 |
| thickness |
整数(可选) |
边框的粗细(像素数),默认值为 1: 正数:仅绘制边框 -1 或负数:填充整个矩形区域(实心矩形) |
| lineType |
枚举值(可选) |
线条类型,控制渲染质量: cv2.LINE_8:8-邻接(默认) cv2.LINE_4:4-邻接 cv2.LINE_AA:抗锯齿线,用于高质量显示 |
| shift |
整数(可选) |
坐标点的小数位数(默认=0),用于亚像素精度绘制 |
3.2 代码示例
python
复制代码
# 2.画矩形
start_point =(50,50)
end_point =(500,500)
color = (0, 0, 255)
thickness = 2
cv2.rectangle(img, start_point, end_point, color, thickness, lineType=cv2.LINE_8)
4、在图像上画椭圆cv2.ellipse
4.1 函数定义
复制代码
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=cv2.LINE_8, shift=0)
| 参数 |
类型 |
说明 |
| img |
NumPy 数组 |
|
| center |
元组 (x, y) |
椭圆中心坐标(整数或浮点数) |
| axes |
元组 (major_axis, minor_axis) |
椭圆轴的长度 |
| angle |
浮点数 |
椭圆旋转角度(顺时针,单位:度),表示主轴相对于水平方向的夹角 |
| startAngle |
浮点数 |
起始弧度角(单位:度),从主轴开始逆时针测量 |
| endAngle |
浮点数 |
结束弧度角(单位:度) |
| color |
tuple |
颜色值,BGR 格式,灰度图中为单个整数 |
| thickness |
整数(可选) |
线条粗细,默认值为 1: 正数:绘制轮廓 -1 或负数:填充整个形状(实心椭圆或扇形) |
| lineType |
枚举值(可选) |
线条类型,控制渲染质量: cv2.LINE_8:8-邻接(默认) cv2.LINE_4:4-邻接 cv2.LINE_AA:抗锯齿线,用于高质量显示 |
| shift |
整数(可选) |
中心坐标和轴值中的小数位数(默认=0),用于亚像素精度绘制 |
4.2代码示例
python
复制代码
# 2.绘制圆
# 圆心坐标
ellipse_center = (200,200)
axis1 = (100,50)
axis2 = (120,80)
color1 = (0, 0, 255)
color2 = (0, 255, 0)
thickness = 2
cv2.ellipse(img, ellipse_center, axis1, 0, 0, 360, color1, thickness)
cv2.ellipse(img, ellipse_center, axis2, 90, 0, 270, color2, thickness)
5、在图像上画文本cv2.putText
5.1 函数定义
复制代码
cv2.putText(img, text, org, fontFace, fontScale, color, thickness=1, lineType=cv2.LINE_8, bottomLeftOrigin=False)
| 参数 |
类型 |
说明 |
| img |
NumPy 数组 |
|
| text |
字符串 str |
要绘制的文字内容 |
| org |
元组 (x, y) |
文本左下角起点坐标(baseline 的位置) |
| fontFace |
枚举值或整数 |
字体类型,决定文字样式。常用选项: cv2.FONT_HERSHEY_SIMPLEX:普通无衬线字体 cv2.FONT_HERSHEY_PLAIN:小号简洁字体 cv2.FONT_HERSHEY_DUPLEX:双倍高度字体 |
| fontScale |
浮点数 |
字体缩放因子,控制字体大小: 1.0 表示原始大小 2.0 表示放大两倍 |
| color |
tuple |
颜色值,BGR 格式,灰度图中为单个整数 |
| thickness |
整数(可选) |
文字笔画粗细(像素数),默认为 1 |
| lineType |
枚举值(可选) |
线条类型,控制渲染质量: cv2.LINE_8:8-邻接(默认) cv2.LINE_4:4-邻接 cv2.LINE_AA:抗锯齿线,用于高质量显示 |
| bottomLeftOrigin |
布尔值(可选) |
是否从图像左下角为原点(像数学坐标系) False(默认):标准图像坐标系(左上为原点) True:y 向下为负(极少使用) |
5.2 代码示例
python
复制代码
text = 'This is a dog!'
org = (50,50)
color = (0, 0, 255)
cv2.putText(img, text, org, fontFace = cv2.FONT_HERSHEY_SIMPLEX, fontScale = 1.5, color = (0, 0, 255), thickness = 2, lineType = cv2.LINE_AA)