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:矩形高度
相关推荐
数商思语行1 分钟前
从BA、产品、实施或开发转做FDE,先补哪种能力
人工智能·ai·供应链·商业分析·ontology·本体·fde
代码简单说3 分钟前
GPT Image 2.5 API 调用教程:Node.js 实现图片生成与编辑
人工智能
零基础1238 分钟前
VoiceStudio 开源项目深度解析:特性、对比与实战测试
人工智能·经验分享·python·开源
故七月12 分钟前
本地生活 GEO 内容质量风控体系构建 —— 基于陕西金贝儿母婴家政项目,万域智瞰 GEO 实践
人工智能·生活
老马识码17 分钟前
Harness:Agent 运行时架构
人工智能
林伽一17 分钟前
决策模型接口趋同、缓存按字节计价,AI 技术栈的两处底层改写| 2026年10月04日
人工智能·缓存
vilya21 分钟前
我怎么给手机 GUI Agent 做双通道感知:无障碍树为主,投屏像素兜底
android·人工智能
the3clipse22 分钟前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
alonglong23 分钟前
用 744 行替代 Open WebUI:llama.cpp + 本地 Qwen3 聊天栈实录
人工智能
jinyishu_24 分钟前
RAG 文本分块:七种 Chunking 策略与选型方法
人工智能