尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python OpenCV 轮廓分析(Contour Analysis)详解与实战

Python OpenCV 轮廓分析(Contour Analysis)详解与实战
📅 发布时间:2026/7/16 18:11:57

1. 什么是轮廓(Contour)

轮廓(Contour)是图像中目标的边界点集合。通常先经过灰度化、二值化,再利用findContours()提取。

典型流程:

原图 → 灰度 → 二值化 → findContours → 轮廓分析

工业视觉中常用于:

  • 元件定位
  • Connector 外形检测
  • OCR 字符区域提取
  • 缺件检测
  • 尺寸测量

2. findContours() 详解

函数原型

contours,hierarchy=cv2.findContours(image,mode,method)

参数说明

image

必须是二值图。

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
mode(检索模式)
  • RETR_EXTERNAL:仅外轮廓(工业视觉最常用)
  • RETR_LIST:所有轮廓,不保存层级
  • RETR_CCOMP:两层层级
  • RETR_TREE:完整树结构
method(近似方式)
  • CHAIN_APPROX_NONE:保存所有点
  • CHAIN_APPROX_SIMPLE:仅保存关键点(推荐)

完整示例

importcv2 img=cv2.imread("test.png")gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)contours,hierarchy=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)draw=img.copy()cv2.drawContours(draw,contours,-1,(0,255,0),2)cv2.imshow("Contours",draw)cv2.waitKey(0)

3. 轮廓几何特征分析

面积

area=cv2.contourArea(cnt)

作用:

  • 过滤噪声
  • 判断目标大小

周长

length=cv2.arcLength(cnt,True)

作用:

  • 多边形逼近
  • 圆度计算

外接矩形

x,y,w,h=cv2.boundingRect(cnt)

作用:

  • ROI 提取
  • OCR 定位

最小外接矩形

rect=cv2.minAreaRect(cnt)box=cv2.boxPoints(rect)

适用于旋转目标。

重心

M=cv2.moments(cnt)cx=int(M["m10"]/M["m00"])cy=int(M["m01"]/M["m00"])

用于目标定位和运动控制。


4. Moments 与 Hu 不变矩

图像矩用于描述目标形状。

M=cv2.moments(cnt)hu=cv2.HuMoments(M)print(hu)

Hu 不变矩特点:

  • 平移不变
  • 缩放不变
  • 基本旋转不变

适用于:形状识别、Logo 检测。


5. approxPolyDP 多边形逼近

epsilon=0.02*cv2.arcLength(cnt,True)approx=cv2.approxPolyDP(cnt,epsilon,True)

应用:

  • 三角形检测
  • 矩形检测
  • 元件识别

6. Convex Hull 与 Convexity Defects

凸包

hull=cv2.convexHull(cnt)

作用:

  • 获取最小凸包
  • 外形分析

凸缺陷

idx=cv2.convexHull(cnt,returnPoints=False)defects=cv2.convexityDefects(cnt,idx)

作用:

  • Connector 防呆槽检测
  • 缺口检测
  • 手势识别

7. matchShapes()

score=cv2.matchShapes(cnt1,cnt2,cv2.CONTOURS_MATCH_I1,0)

返回值越小越相似。

应用:

  • Connector 插反检测
  • 极性检测
  • Logo 比对

8. 综合案例

forcntincontours:area=cv2.contourArea(cnt)ifarea<300:continuex,y,w,h=cv2.boundingRect(cnt)cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)cv2.putText(img,f"Area:{area:.1f}",(x,y-5),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,255),2)

总结

API用途
findContours提取轮廓
contourArea面积
arcLength周长
moments几何矩
HuMoments形状描述
approxPolyDP多边形逼近
convexHull凸包
convexityDefects凸缺陷
matchShapes轮廓匹配

相关新闻

  • Ornith-1.0-9B-OptiQ-4bit与mlx-optiq生态:打造本地化AI开发环境 [特殊字符]
  • 如何用d2s-editor打造你的暗黑破坏神2完美存档:5步实现角色定制与物品管理
  • CANN/asc-devkit DCCI缓存控制接口文档

最新新闻

  • Codex Windows认证失败的7个关键排查点
  • ClickHouse在实时数仓中的架构定位:从Lambda到Kappa架构的存储层演进分析
  • 渭南黄金回收避坑实录:18K金、金条、足金首饰怎么卖才划算?五店实测还原真相 - 小城生活闲谈
  • 5分钟搭建浏览器端人体姿态搜索系统:免费开源实时动作分析终极指南
  • Spyc与JSON/XML对比:为什么选择YAML作为PHP数据交换格式
  • openEuler SBOM-website完整指南:从安装到部署的一站式解决方案

日新闻

  • Toon Boom Harmony 高效工作流:从节点视图到镜头标记的实战技巧
  • 真力时售后维修电话,为您提供专业腕表保养与故障修复服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【C++】类和对象--构造函数进阶(初始化列表与explicit)

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号