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:矩形高度
相关推荐
AKAMAI3 分钟前
每个应用程序现在都生活在人工智能生态系统中
人工智能·云计算
O。O蛋黄酥啊5 分钟前
GraphRAG 和 LightRAG 详解与对比
人工智能·python·算法·rag·graphrag·lightrag
Buke..8 分钟前
【小程序逆向】某游快爆 AI 逆向 sign参数:AI 辅助分析与 MCP 工具链实战
前端·人工智能·爬虫·python·小程序·notepad++
Huazhongzhanhui17 分钟前
2026武汉国际汽车线束及连接器工业展览会智能线束新地标
大数据·人工智能
selia107821 分钟前
AI手撕代码笔记
人工智能·笔记·深度学习
树獭哥29 分钟前
量化金融入门:从数据规则到随机游走与凯利公式
人工智能·算法·金融·量化金融
联盟分享专家30 分钟前
2026独立站引流推广:低成本获取网站精准流量的7个渠道
人工智能
G智爱AI36 分钟前
2026工作汇报PPT AI工具实测|主流省时办公工具横向对比
人工智能·powerpoint
迪康coolmu37 分钟前
当大模型遇上终端安全—AI驱动的智能运维实践
运维·人工智能·安全
财迅通Ai38 分钟前
科源制药携手腾讯云推进AI办公迭代升级
人工智能·云计算·腾讯云·科源制药