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)
相关推荐
AI视觉网奇2 小时前
roi生成 二值图
人工智能·opencv·计算机视觉
南极星10052 小时前
OPENCV(python)--初学之路(十七)二进制鲁棒独立(BRIEF)和定向快速和轮换(ORB)
人工智能·python·opencv
测试人社区-千羽20 小时前
智能测试的终极形态:从自动化到自主化的范式变革
运维·人工智能·python·opencv·测试工具·自动化·开源软件
测试人社区-小明1 天前
量子计算对测试未来的潜在影响:软件测试的范式变革
opencv·测试工具·pycharm·机器人·自动化·github·量子计算
民乐团扒谱机1 天前
【微实验】直方图均衡化:让光影重获新生的魔法,在明暗之间编织细节的诗篇
图像处理·opencv·计算机视觉
Mrliu__1 天前
Opencv(十九) : 图形轮廓特征查找
人工智能·opencv·计算机视觉
木心爱编程1 天前
Qt C++ + OpenCV 实战:从零搭建实时视频滤镜与图像识别系统
c++·qt·opencv
格林威1 天前
多相机拼接:消除重叠区域的6个核心方法,附OpenCV+Halcon实战代码!
人工智能·数码相机·opencv·计算机视觉·机器人·视觉检测·制造
CoookeCola2 天前
离线视频水印清除工具:手动选定位置(ROI)与强制修复功能详解,支持命令行ROI定位
网络·图像处理·opencv·计算机视觉·开源·github·音视频