基于 OpenCV 的 PCB 核心缺陷检测:短路、断路与焊盘脱落实现详解
PCB(印刷电路板)作为电子设备的核心载体,其线路与焊盘的完整性直接决定产品可靠性。线路短路、断路及焊盘脱落是 PCB 生产中最常见的三类缺陷,传统人工检测效率低、误判率高。本文基于 OpenCV 开源库,从检测原理出发,提供完整的算法实现与使用示例,助力快速搭建 PCB 缺陷检测系统。
一、核心缺陷检测原理
三类缺陷的检测均以 **“标准模板对比 + 特征差异分析”** 为核心思路,通过预处理增强图像对比度,再针对不同缺陷的视觉特征设计专属检测逻辑:
1.1 线路短路检测原理
短路表现为两条独立线路间出现额外连通区域。通过将待检测 PCB 图像与无缺陷标准模板做绝对差分运算,短路区域会在差分图像中呈现高亮度区域;再经阈值分割、形态学去噪后,筛选出面积超过设定阈值的连通区域,即可定位短路缺陷。
1.2 线路断路检测原理
断路表现为线路轮廓的连续性中断。先对 PCB 图像进行边缘检测与轮廓提取,获取线路的完整轮廓;再通过轮廓拟合与断裂点分析,计算轮廓的近似多边形或最小外接矩形,若轮廓存在明显的 “缺口”(即轮廓长度与标准线路长度偏差超过阈值),则判定为断路。
1.3 焊盘脱落检测原理
焊盘脱落表现为指定位置的焊盘区域缺失或变形。利用模板匹配在待检测图像中定位标准焊盘的 ROI(感兴趣区域),计算该 ROI 的有效像素面积(焊盘区域),与标准模板中焊盘的面积进行对比,若面积偏差率超过设定阈值(如 20%),则判定为焊盘脱落。
二、完整实现代码
以下代码整合了三类缺陷的检测功能,包含图像预处理、缺陷定位、结果标记等全流程,注释详细便于二次开发。
import cv2
import numpy as npclass PCBDefectDetector:def __init__(self, template_path, short_thresh=30, open_thresh=50, pad_area_thresh=0.2):"""初始化PCB缺陷检测器:param template_path: 无缺陷标准模板路径:param short_thresh: 短路缺陷面积阈值(像素):param open_thresh: 断路缺陷长度偏差阈值(像素):param pad_area_thresh: 焊盘脱落面积偏差率阈值(0-1)"""self.template = cv2.imread(template_path, 0) # 灰度读取标准模板self.short_thresh = short_threshself