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:矩形高度
相关推荐
TMT星球2 小时前
虎鲸文娱春苗编剧计划全面升级,已孵化20个剧本进入前期开发
大数据·人工智能
奔跑中的小象8 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南8 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang9 小时前
LangGraph 状态机实战
人工智能
刹那芳华19929 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作9 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门9 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜9 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟9 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能