当前位置: 首页 > news >正文

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

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轮廓匹配
http://www.jsqmd.com/news/1201587/

相关文章:

  • 高速PCB设计中信号完整性与走线阻抗控制详解
  • Ornith-1.0-9B-OptiQ-4bit与mlx-optiq生态:打造本地化AI开发环境 [特殊字符]
  • 电源工程师实战:调试技巧与效率优化全解析
  • 2026年保定旱喷喷泉厂家挑选攻略 宏洋喷泉相关信息汇总 - Fan_00
  • Glance图标系统设计:如何创建可区分的视觉元素
  • 线性光耦HCNR201原理与工业隔离电路设计指南
  • CANN/asc-devkit DCCI缓存控制接口文档
  • 从理论到实践:UML四大核心图解析与银行系统建模实战
  • 如何用d2s-editor打造你的暗黑破坏神2完美存档:5步实现角色定制与物品管理
  • 图像缩放三剑客:最邻近、双线性与双三次插值的原理、对比与实战
  • C语言获取文件大小:4种实用方法详解与性能对比
  • 广州二手手表变现流程|线上估价到店交易完整指南 - 禹竞奢收行
  • 【小程序毕业设计】基于协同过滤算法的校园音乐推荐小程序(Django 后端)的设计与实现(源码+文档+远程调试,全bao定制等)
  • 玩转群晖NAS套件系列五:SSH赋能Moments,解锁智能相册的隐藏潜能!
  • STM32程序下载双方案实战:从ST-LINK调试到USB-TTL串口烧录的完整指南
  • Agents-A1-OptiQ-4bit vs 传统模型:内存占用与推理速度对比评测
  • 终极指南:如何用Nori-30M实现零训练快速表格回归预测(附完整代码)
  • Gemma-4-31B-IT-nvfp4技术解析:深入理解nvfp4量化与MLX转换原理
  • 基于LLM的股票智能分析系统:多市场数据驱动决策实践
  • Gemma-4-e4b-it-mxfp8安全指南:模型部署中的隐私保护措施
  • Rosetta API参考:完整接口文档与使用示例
  • 清远门窗售后哪家好?原来这3点是关键标准? - 速递信息
  • 10分钟上手Ascend-SACT/LTX-2:T2V与I2V推理完整流程
  • Spark 数据序列化:Kryo 比 Java 默认序列化快了多少
  • CANN/ops-math权重量化预处理算子
  • 排查Charles代理导致手机断网的五大关键场景
  • Ornith-1.0-9B-OptiQ-4bit未来展望:量化模型的发展趋势与路线图
  • 【小程序毕业设计】智慧校园导航与路线规划小程序的设计与实现(Java) 基于 Java 的校园室内外导航查询系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • C#工业视觉相机热插拔与断连自愈:从“被动崩溃”到“秒级无感恢复”
  • gowebframe3本工程功能清单