news 2026/8/5 10:09:48

OpenCV实战篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. contoursfindContours得到的轮廓列表。
  3. contourIdx
    • 填数字:绘制第 N 个轮廓;
    • -1:一次性绘制全部轮廓
  4. colorBGR 格式颜色元组: 红色(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. contoursfindContours得到的轮廓列表。
  3. contourIdx
    • 填数字:绘制第 N 个轮廓;
    • -1:一次性绘制全部轮廓
  4. colorBGR 格式颜色元组: 红色(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:矩形高度
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 10:09:21

TransUnet:融合Transformer与CNN的医学图像分割模型详解

1. 从U-Net到TransUnet:医学图像分割的范式演进 如果你在医学影像分析领域摸爬滚打过几年,一定对U-Net这个名字不陌生。这个经典的编码器-解码器结构,凭借其对称的“U”形设计和跳跃连接,几乎成了医学图像分割任务的“标配”和入门…

作者头像 李华
网站建设 2026/8/5 10:09:13

从零搭建个人知识管理平台:Docker部署与自动化信息聚合实战

最近在技术社区里,一个名为“粉丝空间站”的项目开始频繁出现。乍一看,这个名字似乎和明星、社群运营有关,但深入接触后你会发现,它本质上是一个 面向开发者的、高度可定制的个人知识管理与内容聚合平台 。很多开发者尝试后反馈…

作者头像 李华
网站建设 2026/8/5 10:03:21

Lua模块实现Linux输入事件读取:原理、安装与实战应用

1. 项目概述:为什么要在Lua里读取Linux输入事件?如果你做过嵌入式Linux的UI开发,或者写过一些需要监听键盘、鼠标、触摸屏甚至游戏手柄的脚本,你大概率会碰到一个需求:如何高效、直接地读取这些输入设备产生的原始事件…

作者头像 李华
网站建设 2026/8/5 10:01:59

Linux系统性能监控:top命令详解与实战运维指南

1. 项目概述:为什么top命令是运维的“听诊器”?如果你在Linux服务器上工作,无论是管理一台个人VPS,还是维护一个庞大的生产集群,有一个命令你几乎每天都会用到,甚至可能已经形成了肌肉记忆——那就是top。它…

作者头像 李华
网站建设 2026/8/5 10:01:42

Unity+Android Studio开发桌面悬浮窗萌宠:透明背景与权限处理全攻略

1. 项目概述与核心价值最近在社区里看到不少朋友对“桌面萌宠”这个点子感兴趣,想自己动手做一个,但往往卡在Unity和Android Studio的联调、透明背景处理以及最让人头疼的悬浮窗权限上。作为一个在移动端混合开发领域摸爬滚打了多年的老手,我…

作者头像 李华