速通机器学习 12|轮廓检测、轮廓特征与轮廓近似
目录前言1 、轮廓检测1.1 轮廓与边缘的区别1.2 核心 APIcv2.findContours () 查找轮廓cv2.drawContours () 绘制轮廓1.3 轮廓检测基础代码2、轮廓特征1.轮廓面积 contourArea2.轮廓周长 arcLength3.外接矩形 boundingRect正外接矩形不旋转4.最小外接旋转矩形 minAreaRect5.轮廓重心矩 Moments3、轮廓近似3.1 原理3.2 API3.3 完整综合代码​编辑4、本章小结前言承接第 8 章边缘检测。边缘检测只能得到零散的边界像素轮廓检测可以把同一物体的边界像素组合成一条完整闭合轮廓常用于物体计数、形状识别、目标分割是传统计算机视觉高频模块。1 、轮廓检测1.1 轮廓与边缘的区别边缘图像灰度发生突变的像素点线条零散不一定闭合。轮廓经过算法分组之后属于同一个物体的闭合边界点集合可以做后续计算。重要前提cv2.findContours()输入优先使用二值图像黑色为背景白色为待检测目标。 标准处理流水线彩色图 → 灰度图 → 二值化threshold→ 查找轮廓。1.2 核心 APIcv2.findContours () 查找轮廓contours, hierarchy cv2.findContours(binary_img, mode, method)contours轮廓列表存储图像中所有检测到的轮廓。整体为元组嵌套列表结构每个子列表对应一条独立轮廓由一组物体边界的(x,y)坐标点组成可单独提取、处理单条轮廓。hierarchy轮廓层级用于处理嵌套轮廓物体内部存在孔洞。检索模式 modecv2.RETR_EXTERNAL只提取最外层轮廓忽略内部孔洞日常最常用。cv2.RETR_TREE输出完整的嵌套层级关系处理孔洞、内外轮廓。轮廓点存储方式 methodcv2.CHAIN_APPROX_SIMPLE压缩轮廓点去掉重复冗余点节省内存推荐使用。cv2.CHAIN_APPROX_NONE保存边界上全部像素点点数量大。cv2.drawContours () 绘制轮廓cv2.drawContours(dst_img, contours, index, color, thickness)dst_img绘制轮廓的目标图像必须传入原图副本避免修改原始图像。contours需要绘制的轮廓列表为findContours检测得到的轮廓数组。index轮廓索引-1代表绘制所有轮廓传入具体数字如0、1仅绘制对应序号的单条轮廓。color轮廓绘制颜色遵循 OpenCV 的 BGR 通道格式例如(0,0,255)为红色、(0,255,0)为绿色。thickness轮廓线条宽度单位为像素设置为-1可填充整个轮廓内部区域1.3 轮廓检测基础代码import cv2 读取原图 phone cv2.imread(rD:\pythoncode2\bigdata_ai40\Image\phone.png) 转换灰度图 phone_gray cv2.cvtColor(phone, cv2.COLOR_BGR2GRAY) cv2.imshow(phone_gray, phone_gray) cv2.waitKey(0) 二值化处理分割前景与背景生成黑白二值图 ret, phone_binary cv2.threshold(phone_gray, 127, 255, cv2.THRESH_BINARY) cv2.imshow(phone_binary, phone_binary) cv2.waitKey(0) 查找轮廓 [-2] 兼容所有OpenCV版本稳定获取轮廓列表 RETR_TREE提取完整层级轮廓包含内部孔洞 CHAIN_APPROX_NONE保留轮廓全部像素点 contours cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2] print(f检测到轮廓数量{len(contours)}) 绘制所有轮廓 img_copy phone.copy() cv2.drawContours(imageimg_copy, contourscontours, contourIdx-1, color(0, 0, 255), thickness3) cv2.imshow(phone_contour, img_copy) cv2.waitKey(0) 释放所有窗口 cv2.destroyAllWindows()2、轮廓特征拿到单条轮廓cnt contours[i]可以计算物体各类几何特征用于筛选目标物体。1.轮廓面积 contourAreaarea cv2.contourArea(cnt)作用过滤噪声小轮廓设置面积阈值把过小干扰轮廓剔除。2.轮廓周长 arcLengthperi cv2.arcLength(cnt, closedTrue)closedTrue代表轮廓是闭合图形周长是轮廓近似的重要输入参数。3.外接矩形 boundingRect正外接矩形不旋转x, y, w, h cv2.boundingRect(cnt)x,y矩形左上角坐标w,h宽、高。可以画矩形cv2.rectangle(img,(x,y),(xw,yh),(0,0,255),2)4.最小外接旋转矩形 minAreaRectrect cv2.minAreaRect(cnt) box cv2.boxPoints(rect) box np.intp(box) cv2.drawContours(img, [box], 0, (255, 0, 0), 2)可以得到旋转角度适合倾斜物体。5.轮廓重心矩 MomentsM cv2.moments(cnt) cx int(M[m10] / M[m00]) cy int(M[m01] / M[m00])获取物体中心点坐标。使用场景通过面积、宽高比筛选只保留我们感兴趣的物体轮廓。3、轮廓近似3.1 原理原始轮廓包含大量点图像噪声会带来很多毛刺、抖动。轮廓近似approxPolyDP使用道格拉斯‑普克算法用少量顶点多边形去拟合原始复杂轮廓。3.2 APIapprox cv2.approxPolyDP(curve, epsilon, closed)curve输入单条轮廓不能直接传入全部 contours 列表。epsilon近似精度最核心超参数通常取轮廓周长的比例epsilon 0.04 * cv2.arcLength(cnt, True)epsilon 越大顶点越少轮廓越粗糙epsilon 越小顶点越多越贴近原始轮廓。closedTrue表示处理闭合轮廓。根据返回approx顶点数量做形状识别3 个顶点 → 三角形4 个顶点 → 矩形、正方形大量顶点 → 圆形或者不规则图形3.3 完整综合代码import cv2 import numpy as np 读取图像 img cv2.imread(rD:\pythoncode2\bigdata_ai40\Image\shape.png) origin_img img.copy() 图像预处理灰度转换 二值化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) 查找外层轮廓兼容所有OpenCV版本 contours cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2] 绘制原始完整轮廓 cv2.drawContours(origin_img, contours, -1, (0, 255, 0), 2) 遍历所有轮廓计算特征、绘制矩形并执行轮廓近似 for cnt in contours: # 1. 计算轮廓面积过滤微小噪声轮廓 area cv2.contourArea(cnt) if area 50: continue # 2. 计算闭合轮廓周长 peri cv2.arcLength(cnt, closedTrue) # 3. 轮廓近似通过周长比例设置精度 epsilon 0.04 * peri approx cv2.approxPolyDP(cnt, epsilon, closedTrue) # 绘制近似后的多边形轮廓 cv2.drawContours(img, [approx], -1, (255, 0, 0), 2) # 4. 绘制正外接矩形不旋转 x, y, w, h cv2.boundingRect(approx) cv2.rectangle(img, (x, y), (x w, y h), (0, 255, 255), 2) # 5. 绘制最小外接旋转矩形适配倾斜物体 min_rect cv2.minAreaRect(cnt) min_box cv2.boxPoints(min_rect) min_box np.intp(min_box) cv2.drawContours(img, [min_box], 0, (255, 255, 0), 2) # 识别轮廓顶点数量并标注 point_num len(approx) cv2.putText(img, fpts:{point_num}, (x, y-8), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) 展示结果 cv2.imshow(raw_contour, origin_img) cv2.imshow(approx_feature_result, img) cv2.waitKey(0) 释放所有窗口 cv2.destroyAllWindows()4、本章小结轮廓是闭合物体点集由二值图像提取区别于零散边缘。轮廓特征包含面积、周长、外接矩形、重心用于筛选目标物体。轮廓近似approxPolyDP依靠 epsilon 控制精度依靠顶点数目实现简单形状识别。典型场景零件检测、答题卡识别、图形分类、物体计数。

相关新闻

构建本地AI音乐创作平台:ACE-Step UI的SQLite数据库管理方案

构建本地AI音乐创作平台:ACE-Step UI的SQLite数据库管理方案

构建本地AI音乐创作平台:ACE-Step UI的SQLite数据库管理方案 【免费下载链接】ace-step-ui 🎵 The Ultimate Open Source Suno Alternative - Professional UI for ACE-Step 1.5 AI Music Generation. Free, local, unlimited. Stop paying for Suno! …

2026/8/8 18:01:30 阅读更多 →
ECharts多坐标系组合:解决复杂数据可视化的终极方案

ECharts多坐标系组合:解决复杂数据可视化的终极方案

ECharts多坐标系组合:解决复杂数据可视化的终极方案 【免费下载链接】echarts Apache ECharts is a powerful, interactive charting and data visualization library for browser 项目地址: https://gitcode.com/GitHub_Trending/echa/echarts 在数据可视化…

2026/8/8 18:01:30 阅读更多 →
终极指南:3步实现Office文档到Markdown的完美转换

终极指南:3步实现Office文档到Markdown的完美转换

终极指南:3步实现Office文档到Markdown的完美转换 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 还在为文档格式转换而头疼吗&#xff1f…

2026/8/8 18:01:30 阅读更多 →

最新新闻

实用指南:快速掌握League Spartan开源字体的完整使用方法

实用指南:快速掌握League Spartan开源字体的完整使用方法

实用指南:快速掌握League Spartan开源字体的完整使用方法 【免费下载链接】league-spartan A fantastic new revival of ATFs classic Spartan, a geometric sans-serif that has no problem kicking its enemies in the chest. 项目地址: https://gitcode.com/gh…

2026/8/8 19:03:57 阅读更多 →
道德经道影书斋注释版 080|小国寡民

道德经道影书斋注释版 080|小国寡民

前言春秋时代,大国不断吞并小国,战争连绵,百姓流离。诸侯追求国土越大越好、人口越多越好,不停向外征伐扩张。老子反其道而行,描绘小国寡民的理想图景。很多后世之人,把这一章解读成要退回原始部落&#xf…

2026/8/8 19:03:57 阅读更多 →
Augur项目深度解析:从CHAOSS到独立发展的开源指标收集平台

Augur项目深度解析:从CHAOSS到独立发展的开源指标收集平台

2FAuth社区贡献指南:如何参与翻译、报告bug和提交PR 【免费下载链接】2FAuth A Web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes 项目地址: https://gitcode.com/gh_mirrors/2f/2FAuth 2FAuth是一款开源…

2026/8/8 19:03:57 阅读更多 →
3个关键步骤理解MobaXterm激活机制:从算法原理到实用工具

3个关键步骤理解MobaXterm激活机制:从算法原理到实用工具

3个关键步骤理解MobaXterm激活机制:从算法原理到实用工具 【免费下载链接】MobaXterm-Keygen MobaXterm Keygen Originally by DoubleLabyrinth 项目地址: https://gitcode.com/gh_mirrors/mob/MobaXterm-Keygen MobaXterm作为一款功能强大的Windows远程桌面…

2026/8/8 19:03:57 阅读更多 →
Illustration2Vec核心功能解析:标签预测与特征提取的实战案例

Illustration2Vec核心功能解析:标签预测与特征提取的实战案例

Illustration2Vec核心功能解析:标签预测与特征提取的实战案例 【免费下载链接】illustration2vec A simple deep learning library for estimating a set of tags and extracting semantic feature vectors from given illustrations. 项目地址: https://gitcode.…

2026/8/8 19:03:57 阅读更多 →
OneMore Calendar:3个简单步骤开启智能笔记时间线管理

OneMore Calendar:3个简单步骤开启智能笔记时间线管理

OneMore Calendar:3个简单步骤开启智能笔记时间线管理 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为找不到重要笔记而烦恼吗?想象一下…

2026/8/8 19:02:57 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →