OpenCV 学习7-图像标注

本文主要说明如何在图像上添加标注信息,包括:

  • 在图像上画线
  • 在图像上画圆圈和实心圆
  • 在图像上画矩形
  • 在图像上画文本

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)
相关推荐
智驱力人工智能6 小时前
货车违规变道检测 高速公路安全治理的工程实践 货车变道检测 高速公路货车违规变道抓拍系统 城市快速路货车压实线识别方案
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
qwy7152292581636 小时前
11-图像的缩放
人工智能·opencv·计算机视觉
困死,根本不会9 小时前
OpenCV摄像头实时处理:稳定的红绿激光点实时检测工具
笔记·opencv·学习
光羽隹衡9 小时前
计算机视觉——Opencv(图像透视变换)
人工智能·opencv·计算机视觉
智驱力人工智能10 小时前
无人机目标检测 低空安全治理的工程实践与价值闭环 无人机缺陷识别 农业无人机作物长势分析系统 森林防火无人机火点实时识别
人工智能·opencv·安全·yolo·目标检测·无人机·边缘计算
格林威11 小时前
Baumer相机车牌字符分割与识别:优化车牌识别准确率的 7 种方法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·计算机视觉·视觉检测·halcon·工业相机·智能相机
格林威11 小时前
Baumer相机系统延迟测量与补偿:保障实时控制同步性的 5 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·工业相机
qwy7152292581631 天前
10-图像的翻转
人工智能·opencv·计算机视觉
kiro_10231 天前
BGRtoNV12与NV12toBGR互转函数
人工智能·opencv·计算机视觉
智驱力人工智能1 天前
货车走快车道检测 高速公路安全治理的工程实践与价值闭环 高速公路货车占用小客车道抓拍系统 城市快速路货车违规占道AI识别
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算