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. closedTrue=闭合多边形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. closedTrue=闭合多边形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:矩形高度
相关推荐
零依赖极客14 小时前
Day 9·1 KV 也量化——q8 KV 把缓存与 decode 带宽压到一半
c语言·开发语言·arm开发·人工智能·缓存·矩阵
陈童学哦14 小时前
AI术语大全
人工智能
tuanxiang14 小时前
用去AI味工具调整大模型生成的技术文档,我踩了检测阈值的坑
人工智能
天辛大师14 小时前
天辛大师谈AI时代的沉思录,All in AI 持续做事与放大效应
大数据·人工智能·随机森林·重构·启发式算法
不要生病了14 小时前
Brain-JEPA:用功能梯度定位与时空遮蔽预训练 fMRI 基础模型
人工智能·深度学习
艺杯羹14 小时前
穿透深度慢思考黑盒:DeepSeek-R1 蒸馏模型量化压缩、vLLM 极限吞吐与私网落地实战
人工智能·大模型·部署
韦韦(Carina)14 小时前
技术博客结构化:让 AI 准确引用你的 7 条排版铁律
大数据·人工智能
Runwise创新社区14 小时前
Anthropic多智能体架构怎么落地?Lead Agent、共享记忆与并行任务的设计边界
人工智能·架构·多智能体
angushine14 小时前
文本转视频2
人工智能·音视频·语音识别
昇腾知识体系14 小时前
昇腾环境安装 flash_attn:FlashAttnPrefillBackend 报错与替代算子
人工智能·pytorch·华为·知识图谱