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)
相关推荐
柠檬07111 小时前
fillPoly 函数
opencv
dazzle3 小时前
计算机视觉处理(OpenCV基础教学(十九):图像轮廓特征查找技术详解)
人工智能·opencv·计算机视觉
柳鲲鹏8 小时前
OpenCV视频实时跟踪目标,多种算法,python版
opencv·算法·音视频
sali-tec9 小时前
C# 基于OpenCv的视觉工作流-章7-膨胀
图像处理·人工智能·opencv·算法·计算机视觉
格林威1 天前
传送带上运动模糊图像复原:提升动态成像清晰度的 6 个核心方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·ai·halcon·工业相机
dazzle1 天前
计算机视觉处理(OpenCV基础教学(十七):图像轮廓检测技术详解)
人工智能·opencv·计算机视觉
寻找华年的锦瑟1 天前
Qt-YOLO-OpenCV
qt·opencv·yolo
却道天凉_好个秋1 天前
OpenCV(五十三):Haar人脸识别
人工智能·opencv·目标跟踪·haar人脸识别
柠檬07112 天前
opencv mat 统计小于0的个数
人工智能·opencv·计算机视觉
Jerryhut2 天前
背景建模实战:从帧差法到混合高斯模型的 OpenCV 实现
人工智能·opencv·计算机视觉