OpenCV实战篇

1.轮廓查找 findContours

复制代码
contours, hierarchy = cv2.findContours(image, mode, method)

返回值

  1. contours:列表,存储所有轮廓 每一个轮廓是一组坐标点数组 (N,1,2),代表一条闭合曲线。
  2. hierarchy:层级数组,记录轮廓父子嵌套关系,仅层级模式需要。

参数

  1. image 必须是二值图(0 黑,255 白,白色为前景轮廓); 推荐前置:灰度→二值化 / Canny 边缘图。

  2. mode 轮廓检索模式

    表格

    模式 抓取范围 层级结构 常用场景
    RETR_EXTERNAL 仅最外层轮廓 无层级 物体检测、计数、框选(首选)
    RETR_LIST 所有轮廓 无层级 单纯统计轮廓总数
    RETR_CCOMP 外层 + 紧邻孔洞 仅限 2 层 区分物体与内部孔洞
    RETR_TREE 全部轮廓 完整树形多层嵌套 复杂多层镂空图形分析
  3. method 轮廓逼近方式

    表格

    常量 作用 特点
    cv2.CHAIN_APPROX_NONE 存储轮廓所有像素点 点极多,占用内存大
    cv2.CHAIN_APPROX_SIMPLE 压缩拐点,只存顶点 只保留拐角坐标,大幅精简,日常首选

2.轮廓绘制

复制代码
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType=None, hierarchy=None, maxLevel=None, offset=None)

核心常用参数

  1. image 绘制画布,建议传入原图副本,不要直接修改原图;格式:BGR 彩色图。
  2. contours findContours 得到的轮廓列表。
  3. contourIdx
    • 填数字:绘制第 N 个轮廓;
    • 填 -1:一次性绘制全部轮廓。
  4. color BGR 格式颜色元组: 红色(0,0,255)、绿色(0,255,0)、蓝色(255,0,0)、白色(255,255,255)、黑色(0,0,0)。
  5. thickness
    • 正数:轮廓线条粗细;
    • -1:把轮廓围成的区域内部全部填充。

3.轮廓的面积与周长

一、轮廓面积:cv2.contourArea(contour)

作用

计算单个闭合轮廓包围区域的像素面积。

参数

  • contour:单条轮廓(contours列表里其中一个元素)

二、轮廓周长:cv2.arcLength(contour, closed)

作用

计算轮廓边线的像素长度。

参数

  1. contour:单条轮廓;
  2. closed:布尔值
    • True:闭合轮廓(首尾相连,日常绝大多数场景用 True)
    • False:开放曲线,不闭合。

4.多边形逼近与凸包

复制代码
approx = cv2.approxPolyDP(curve, epsilon, closed)

参数

  1. curve :单条原始轮廓 cnt
  2. epsilon :逼近精度,最重要参数 含义:原始轮廓与拟合多边形最大允许距离; 常用写法:epsilon = 0.02 * cv2.arcLength(cnt, True) epsilon 越大,顶点越少、图形越粗糙;越小越贴近原图。
  3. closed :True=闭合多边形,False=开放折线
复制代码
hull = cv2.convexHull(points, clockwise=False, returnPoints=True)

参数

  1. points:轮廓点集合(单条轮廓 cnt)
  2. returnPoints:默认 True,返回凸包顶点坐标;False 返回点索引

5.外接矩阵

函数 形状 能否旋转 紧凑程度 适用场景
boundingRect 正矩形 不可旋转 松散 常规框选、快速定位
minAreaRect 斜矩形 可旋转 最紧凑 倾斜物体定位
minEnclosingCircle 圆形 无旋转 适中 圆形目标检测
复制代码
rect = cv2.minAreaRect(contour)

返回值

rect = ((cx, cy), (w, h), angle)

  1. (cx,cy):矩形中心点坐标
  2. (w,h):矩形宽、高
  3. angle:旋转倾斜角度

1.轮廓查找 findContours

复制代码
contours, hierarchy = cv2.findContours(image, mode, method)

返回值

  1. contours:列表,存储所有轮廓 每一个轮廓是一组坐标点数组 (N,1,2),代表一条闭合曲线。
  2. hierarchy:层级数组,记录轮廓父子嵌套关系,仅层级模式需要。

参数

  1. image 必须是二值图(0 黑,255 白,白色为前景轮廓); 推荐前置:灰度→二值化 / Canny 边缘图。

  2. mode 轮廓检索模式

    表格

    模式 抓取范围 层级结构 常用场景
    RETR_EXTERNAL 仅最外层轮廓 无层级 物体检测、计数、框选(首选)
    RETR_LIST 所有轮廓 无层级 单纯统计轮廓总数
    RETR_CCOMP 外层 + 紧邻孔洞 仅限 2 层 区分物体与内部孔洞
    RETR_TREE 全部轮廓 完整树形多层嵌套 复杂多层镂空图形分析
  3. method 轮廓逼近方式

    表格

    常量 作用 特点
    cv2.CHAIN_APPROX_NONE 存储轮廓所有像素点 点极多,占用内存大
    cv2.CHAIN_APPROX_SIMPLE 压缩拐点,只存顶点 只保留拐角坐标,大幅精简,日常首选

2.轮廓绘制

复制代码
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType=None, hierarchy=None, maxLevel=None, offset=None)

核心常用参数

  1. image 绘制画布,建议传入原图副本,不要直接修改原图;格式:BGR 彩色图。
  2. contours findContours 得到的轮廓列表。
  3. contourIdx
    • 填数字:绘制第 N 个轮廓;
    • 填 -1:一次性绘制全部轮廓。
  4. color BGR 格式颜色元组: 红色(0,0,255)、绿色(0,255,0)、蓝色(255,0,0)、白色(255,255,255)、黑色(0,0,0)。
  5. thickness
    • 正数:轮廓线条粗细;
    • -1:把轮廓围成的区域内部全部填充。

3.轮廓的面积与周长

一、轮廓面积:cv2.contourArea(contour)

作用

计算单个闭合轮廓包围区域的像素面积。

参数

  • contour:单条轮廓(contours列表里其中一个元素)

二、轮廓周长:cv2.arcLength(contour, closed)

作用

计算轮廓边线的像素长度。

参数

  1. contour:单条轮廓;
  2. closed:布尔值
    • True:闭合轮廓(首尾相连,日常绝大多数场景用 True)
    • False:开放曲线,不闭合。

4.多边形逼近与凸包

复制代码
approx = cv2.approxPolyDP(curve, epsilon, closed)

参数

  1. curve :单条原始轮廓 cnt
  2. epsilon :逼近精度,最重要参数 含义:原始轮廓与拟合多边形最大允许距离; 常用写法:epsilon = 0.02 * cv2.arcLength(cnt, True) epsilon 越大,顶点越少、图形越粗糙;越小越贴近原图。
  3. closed :True=闭合多边形,False=开放折线
复制代码
hull = cv2.convexHull(points, clockwise=False, returnPoints=True)

参数

  1. points:轮廓点集合(单条轮廓 cnt)
  2. returnPoints:默认 True,返回凸包顶点坐标;False 返回点索引

5.外接矩阵

函数 形状 能否旋转 紧凑程度 适用场景
boundingRect 正矩形 不可旋转 松散 常规框选、快速定位
minAreaRect 斜矩形 可旋转 最紧凑 倾斜物体定位
minEnclosingCircle 圆形 无旋转 适中 圆形目标检测
复制代码
rect = cv2.minAreaRect(contour)

返回值

rect = ((cx, cy), (w, h), angle)

  1. (cx,cy):矩形中心点坐标
  2. (w,h):矩形宽、高
  3. angle:旋转倾斜角度
复制代码
x, y, w, h = cv2.boundingRect(contour)

参数与返回值

  • 入参:单条轮廓cnt
  • 返回:
    • x,y:矩形左上角坐标

    • w:矩形宽度

    • h:矩形高度

      x, y, w, h = cv2.boundingRect(contour)

参数与返回值

  • 入参:单条轮廓cnt
  • 返回:
    • x,y:矩形左上角坐标
    • w:矩形宽度
    • h:矩形高度
相关推荐
泯泷2 分钟前
语音,正在成为 AI Agent 最自然的接口
人工智能·llm·agent
杨凯凡1 小时前
IT日报|2026-11-13:GitHub 大规模凭据攻击、Signal 形式化验证、Claude 新模型与 AI 安全诉讼
人工智能·安全·github
一个天蝎座 白勺 程序猿2 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
伞伞悦读2 小时前
【第83期】特征选择中的验证泄漏排查的实验与排查
人工智能·深度学习·机器学习
用户697625682562 小时前
用 Alook 把本机编程 agent 拉进频道:Pi + MiniMax 实操
人工智能
P1Browser2 小时前
账号触发平台安全审核?拆解标准申诉流程与材料清单
大数据·人工智能·安全·多账号管理·指纹浏览器·账户安全·运营合规
丘山录2 小时前
本地部署 Edge0-145B,98GB 放 NAS 慢 51 倍
人工智能
一只废狗狗狗狗狗狗狗狗狗3 小时前
自监督式学习
人工智能·深度学习·机器学习·bert
武子康3 小时前
给 H3-World 叠加 Turbo,动作 LoRA 为什么还要重新验收?
人工智能·agent·claude
Dawson Zhu3 小时前
【分布式训练④】张量并行与序列并行:把单层参数切碎分到多张卡
人工智能·语言模型·架构·aigc·agi