恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
基于OpenCV的PCB板智能检测系统设计与实现
首页
资讯中心
/
基于OpenCV的PCB板智能检测系统设计与实现
基于OpenCV的PCB板智能检测系统设计与实现
发布时间:2026/8/31 19:24:27
简介本资源是一个面向电子制造自动化与计算机视觉初学者的PCB板智能检测实践项目聚焦于利用OpenCV与Python实现焊盘缺陷识别、元件错位检测等典型工业视觉任务。压缩包共19个文件含11个核心Python源码如main.py、imgproc.py、camera.py、demo.py等覆盖图像采集、预处理、特征提取与结果输出全流程、7个编译缓存文件及1个结果记录文本总大小仅42KB轻量易部署。已有59人学习下载适合具备基础Python语法和图像处理概念的学习者开展端到端项目复现。读者可直接运行完整检测流程深入理解灰度化、二值化、轮廓分析等传统视觉方法在PCB场景中的具体应用并通过模块化代码结构如独立的modbus.py、robot.py掌握工业通信与设备联动的扩展思路为后续接入CNN模型或部署至产线打下扎实工程基础。 用 OpenCV 做 PCB 板的智能检测系统是很多机器视觉工程师遇到的第一类真正有产线意义的项目。我去年在一条小批量测试线上试过一版目标不是替代商用 AOI而是用尽量少的硬件投入把人从重复目检里解放出来。这套系统的主干流程非常经典图像采集、预处理、定位、缺陷判定、结果输出。今天就把这个“基于 OpenCV 的 PCB 板智能检测系统”从设计到落地的完整过程整理出来希望对正准备做同类项目的朋友有帮助。整篇文章会围绕几个关键问题展开为什么这类项目不必一上来就上深度学习、图像采集和打光要注意什么、直方图均衡化和掩膜到底该怎么用、模板定位和边缘检测怎么选、缺陷判定怎么避免误杀以及最终部署时那些让人头疼的 OpenCV 环境问题。这里没有太多玄乎的东西都是实实在在踩过的坑和验证过的做法。1. 别急着上深度学习OpenCV 方案在 PCB 检测里的真实定位1.1 产线检测场景拆解缺件、偏位、桥连、划痕这四类缺陷PCB 板检测表面上看是个“图像分类”问题但真正到了现场你会发现它更像是一个“图像差异分析”问题。产线上最常见的四类缺陷是缺件、偏位、桥连和划痕。缺件好理解某个电阻电容没贴上去偏位是元件位置偏移超过规格桥连是焊锡把相邻引脚连在一起划痕则是板面铜箔或阻焊层受到机械损伤。这些缺陷有一个共同特征它们在二维图像上都能形成明显的几何变化。只要成像条件稳定OpenCV 的轮廓提取、边缘检测、模板匹配就足够捕捉到这些变化。很多朋友一听到“智能检测”就直接想到 YOLO、CNN但传统视觉方案在 PCB 检测里并不落伍。尤其在小批量、多品种的产线上更换一个产品型号只需要重新拍一版模板图、调几个阈值用深度学习反而要收集大量缺陷样本、重新训练周期长且不可控。OpenCV 方案的优势是逻辑透明、可解释性强出现问题能快速定位是算法问题还是成像问题。1.2 从 AOI 设备到自研原型成本和技术门槛的权衡专业的 AOI自动光学检测设备动辄几十万上百万对中小型工厂来说是一笔不小的投入。而一套基于 OpenCV 的自研原型硬件成本主要来自工业相机、镜头、光源和工控机几千到两三万就能起步。当然自研方案的检测覆盖率肯定不如商用 AOI 那么全面但如果你只是要完成“焊盘漏焊、元件缺失、明显偏移”这类基础项目的在线筛选OpenCV 完全可以胜任。这个定位很重要。我在做这套系统的时候始终提醒自己不要试图用传统视觉解决所有缺陷先把漏检和误检控制在一个可接受范围内再逐渐叠加新检测项。产线需要的是一个稳定、可维护、能快速响应的工具不是一个号称万能但调不好的算法模型。把 OpenCV 当作检测引擎把规则和判定逻辑留在自己的代码里这是整套系统的设计哲学。2. 图像采集与硬件选型决定后面算法成功率的第一道关2.1 相机分辨率与镜头选型先算像素当量算法再牛图像不清晰都是白搭。PCB 检测的第一步其实是算清楚需要多大分辨率的相机。这里有一个关键概念叫像素当量也就是每个像素代表的实际物理尺寸。公式很简单像素当量(mm/pixel) 视场宽度(mm) / 图像横向像素数(pixel)。举个例子假设你要检测一块长 100mm 的 PCB横向视野为 100mm相机横向像素是 2448那么像素当量就是 100/2448 ≈ 0.0408mm/pixel。如果你想稳定检测 0.3mm 的微小缺陷这个缺陷在图像上大约占 7 个像素足够轮廓分析使用。如果像素当量超过 0.05mm/pixel0.3mm 的缺陷就只有 6 个像素检测可靠性会明显下降。所以我在选型时一般会按“最小缺陷至少覆盖 5×5 像素”来反推相机分辨率。镜头方面PCB 板本身是一个平面主要考虑畸变和景深。普通 FA 工业镜头就能满足需求但要注意靶面尺寸要大于等于相机传感器靶面否则边缘成像质量会很差。C 接口或 CS 接口的镜头在近距离检测中比较常见对应关系要在选型时确认好。另外如果安装空间有限可以考虑远心镜头它能避免视差带来的尺寸误差但价格会高很多。2.2 光源与打光方式低角度环形光还是同轴光光源是 OpenCV 检测系统里最容易被低估的环节。PCB 表面有铜箔、阻焊层、焊盘、丝印不同材质对光的反射特性差异非常大。我试过两种典型打光方式低角度环形光更适合突出焊盘和铜箔的轮廓因为它会让平坦区域反光进入镜头而焊盘的边缘会产生暗角这样边缘检测的对比度就会很好。同轴光则适合检测阻焊层划痕和丝印字符因为划痕会改变镜面反射方向在均匀背景下形成明显的暗线。实际项目中我常用“低角度环形光 漫射板”的组合。漫射板可以把点光源变成面光源减少铜箔上的高光溢出避免后续二值化时把大片反光区域误当成缺陷。打光角度和亮度要固定下来最好加一个光源控制器避免电压波动导致亮度变化。这听起来和 OpenCV 无关但光源不稳定后面所有阈值都要跟着飘那才是灾难。2.3 图像采集触发与 ROI 设定别让算法处理整张图图像采集一般用光电传感器或接近开关触发相机拍照。PCB 随传送带运动到固定位置时触发信号到达相机相机拍下图片。这里有几个容易踩的坑一是曝光时间要短否则运动中的板子会产生运动模糊二是要设置触发延迟保证板子完全进入视野后再拍照。如果用的是面阵相机最好用硬触发而不是软件连续采集因为连续采集很难保证每张图位置一致后期定位会多花很多匹配时间。图像进入处理流程后第一件事是设定 ROI感兴趣区域。一张 2448×2048 的灰度图大约 5MB如果全图跑边缘检测和模板匹配单张耗时可能要几百毫秒。实际上 PCB 位置在触发下比较固定我们可以根据基准点或板边确定一个较小 ROI把处理面积缩小到原来的四分之一甚至更小。不要小看这一步在产线上每快 100 毫秒就意味着流水线节拍可以更快。3. 图像预处理里的大学问equalizeHist、掩膜还有 CLAHE3.1 为什么全局直方图均衡化不是最优解拿到图像后很多人第一件事就是转灰度然后直接cv2.equalizeHist提升对比度。这在人眼观察时确实更舒服但对 PCB 检测来说全局直方图均衡化往往会放大噪声。原理很简单直方图均衡化是把像素灰度分布尽量拉伸到整个灰度范围。如果图像中大部分区域是背景和 PCB 基材只有少数缺陷区域均衡化会把背景中微小的灰度波动也放大导致后续二值化或边缘检测时出现大量伪边缘。我在测试中遇到过铜箔表面的细小纹理被均衡化后变成类似划痕的伪缺陷后来对比发现不均衡化时这些纹理根本不影响检测。这并不意味着不能做对比度增强只是要讲究方式。如果整张图光照本身比较均匀我通常跳过全局均衡化直接做高斯滤波和边缘检测。如果光照确实不均匀比如暗角明显再考虑增强手段。3.2 用掩膜限定 ROI 再均衡化减少无效区域干扰热词里有一个很典型的搜索组合是“opencv equalizehist 掩膜”说明不少人在处理局部区域增强时遇到了问题。OpenCV 自带的equalizeHist不支持掩膜参数所以如果要只对 ROI 内做均衡化需要自己实现一个基于直方图的映射。做法分三步首先创建掩膜把需要增强的焊盘区域或字符区域设为 255背景设为 0然后统计掩膜区域内每个灰度级出现的次数生成直方图接着计算累计分布函数 CDF并按 CDF 映射灰度值。最终效果是只有 ROI 内的像素被重新映射ROI 外保持原样这样就不会把不关心的背景噪声放大。import cv2 import numpy as np def equalize_hist_with_mask(image, mask): # 统计掩膜区域直方图 hist cv2.calcHist([image], [0], mask, [256], [0, 256]).ravel() # 只统计掩膜内非零像素 total np.sum(mask 0) if total 0: return image.copy() # 累计分布函数 cdf hist.cumsum() cdf_masked np.ma.masked_equal(cdf, 0) cdf_masked (cdf_masked - cdf_masked.min()) * 255 / (cdf_masked.max() - cdf_masked.min()) cdf np.ma.filled(cdf_masked, 0).astype(uint8) return cdf[image]这个函数在 PCB 字符检测和局部焊盘检测里非常好用。比如丝印字符区域容易受基材颜色影响全局均衡化会连基材纹理一起增强而掩膜均衡化能把注意力完全放在字符上。3.3 CLAHE对抗光照不均的另一种选择除了掩膜均衡化OpenCV 还提供了cv2.createCLAHE也就是限制对比度自适应直方图均衡化。它的思路是把图像分成一个个小方块在每个小方块内做直方图均衡化同时限制对比度放大幅度避免噪声被过度放大。CLAHE 对 PCB 板边暗角、曲面基材反光这类区域性光照不均效果很好。使用时需要调两个参数clipLimit和tileGridSize。clipLimit默认 2.0我实际项目中习惯设为 3.04.0太小没效果太大会出现块状伪影tileGridSize默认 8×8对于 2448×2048 的大图可以试试 16×16让局部信息更充分。但要注意CLAHE 是彩色增强还是灰度增强要分开处理如果直接在 BGR 三通道上做容易出现颜色失真。clahe cv2.createCLAHE(clipLimit3.0, tileGridSize(16, 16)) gray_enhanced clahe.apply(gray)在实际检测流程里我会先用 ROI 掩膜裁掉板子以外的区域再在 ROI 内做 CLAHE。这样既能保证检测目标的对比度又不会让背景干扰后续的阈值计算。4. 核心检测算法实战从定位、边缘检测到缺陷判定4.1 PCB 定位模板匹配与 linemod 两种思路在缺陷判定之前首先要解决“把当前板子和标准模板对齐”的问题。PCB 在产线上即使有定位治具也不可能做到完全一致位置和角度都会有微小偏差。如果不做定位任何差影都会产生大量边缘误报。最直接的是cv2.matchTemplate它对平面内平移比较敏感但不支持旋转和缩放。如果 PCB 位姿变化不大完全够用。做法是先制作一张标准板的灰度图作为模板然后在待检图中滑动计算相似度取匹配分数最高的位置作为基准点。匹配分数可以用cv2.TM_CCOEFF_NORMED一般大于 0.8 就可以认为定位成功。如果板子会有明显的旋转可以先用cv2.minAreaRect检测基准圆孔或板边直线计算旋转角度再把待检图旋转回来。这个方法比直接做旋转模板匹配更快而且不占内存。另一个思路是 OpenCV 的linemod它主要基于梯度方向信息进行匹配对光照变化和灰度变化有较强的鲁棒性。但要注意contrib 版本里的 linemod 接口在不同 OpenCV 版本中变动比较大旧代码容易编译不过。我在一个新项目里试过用它做 PCB 板级定位优点是匹配速度快缺点是需要额外制作梯度模板并且对低纹理板面效果不好。如果板面元件密集、边缘丰富linemod 值得一试如果板子就是一片绿油油的基材加几个焊盘模板匹配更省心。4.2 边缘检测Canny 的真正调参顺序定位完成后边缘检测是缺陷判定的重要基础。Canny 边缘检测是目前最常用的但很多新手用的时候只调高低阈值没注意前置处理。一个典型的错误是把边缘检测直接作用在原始灰度图上。PCB 板面的铜箔纹理、丝印字符都会产生大量边缘直接 Canny 会得到一张“噪声图”。正确顺序是先做轻度高斯滤波去除高频噪声再做 CLAHE 或掩膜均衡化增强目标对比度最后才用 Canny。Canny 的两个阈值threshold1和threshold2控制边缘连接的灵敏度。我一般是按“高阈值取梯度幅值直方图的 70% 分位低阈值取高阈值的 1/2 到 1/3”来确定。比如梯度幅值直方图显示 70% 像素的梯度低于 80那高阈值就设 80低阈值设 30 或 40。这样能保留真正的轮廓同时抑制噪声。blurred cv2.GaussianBlur(gray_roi, (5, 5), 1.0) edges cv2.Canny(blurred, 30, 80)说一句题外话Sobel 边缘检测的梯度幅值对光照变化更敏感而 Canny 的非极大值抑制和双阈值连接能维持连续轮廓。在 PCB 检测中我基本只用 Canny只有需要快速预检时才用 Sobel 算个梯度图。边缘检测结果会用于后续的轮廓筛选所以边缘连续性非常重要。如果边缘断断续续我会先做cv2.dilate再加cv2.erode也就是闭运算把断开的边缘连起来。4.3 缺陷判定差影法加轮廓分析有了定位结果就可以进行差影比较。最简单的方式是把待检图按定位结果仿射变换到模板位置然后把两幅图做像素差分用阈值二值化提取差异区域。但这里有一个关键不能直接对灰度图做差分因为光照变化会导致整体灰度偏移必须通过预处理把灰度归一化或者用形态学操作过滤掉灰度偏移。我常用的流程是将待检图与模板图都做高斯滤波然后计算差分图取绝对值对差分图做中值滤波去掉孤立噪点用固定阈值或自适应阈值二值化最后用cv2.findContours提取轮廓。轮廓提取后用面积、外接矩形长宽比、轮廓周长等特征过滤。例如一个焊盘的缺失会在焊盘区域形成一块面积差异桥连则会形成一条横跨两个焊盘的细长连接用轮廓面积阈值可以过滤掉 1-2 个像素的随机噪声。contours, _ cv2.findContours(diff_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area cv2.contourArea(cnt) x, y, w, h cv2.boundingRect(cnt) if area min_area or w max_width or h max_height: continue # 标记缺陷 cv2.rectangle(img_show, (x, y), (x w, y h), (0, 0, 255), 2)如果只是缺件差影法很容易检测出来但如果是划痕这类线性缺陷面积特征就不太够用。这时候要结合轮廓的长度和走向。例如划痕通常是一个长宽比很大的细长轮廓我可以设定w 3 * h或h 3 * w且面积大于阈值再结合轮廓与板边角度来判定是否为划痕。这种规则式的检测逻辑比单纯训练一个分类器要直观得多缺点是规则要针对不同缺陷慢慢积累。4.4 像素标定与尺寸测量怎么把像素转成毫米很多项目不只检测有没有缺陷还要量尺寸比如元件偏移量、焊盘宽度、引脚间距。这时候就需要像素标定。标定的方法很简单把一个已知尺寸的元件放在视场中用 OpenCV 找到它的轮廓得到像素宽度然后用实际宽度除以像素宽度得到像素当量。比如一个标准的 0805 电阻实际长度是 2.0mm图像中检测到轮廓宽度为 100 像素那么像素当量就是 0.02mm/pixel。有了像素当量任意两点或任意轮廓的尺寸都能换算。注意镜头畸变会导致视场中心和边缘的像素当量不一致如果检测精度要求高可以用棋盘格标定出的畸变系数对图像做去畸变处理。我之前在测试中发现视场边缘的测量值比中心偏大约 2%3%做尺寸测量时如果不校正会出现误判。热词里“opencv测量yolo图片中物体大小”其实就是这个流程的结合先用 YOLO 检测出目标物体再用 OpenCV 在检测框内提取目标轮廓得到更精确的像素尺寸最后乘像素当量换成毫米。这个思路很实用后面第 6 部分还会展开讲。5. 环境配置与调试排坑这些 OpenCV 坑我实测踩过5.1 安装 OpenCV 的版本差异conda、pip 还是源码编译关于 OpenCV 的安装网上教程很多但坑也不少。热词里有一串特别典型“ubuntu 如何安装 opencv 5.0.0”、“opencv mingw (mingw-x86_64-posix-seh-gcc) build for windows”、“vs2013运行vs2015的opencv”、“qt6怎么配置opencv”。先说结论做原型验证用 pip 安装opencv-python最省事但要分清带不带 GUI 的版本。opencv-python默认包含 Qt 支持和高层 GUI 功能而opencv-python-headless不包含 GUI适合服务器和 Docker 环境。如果你在容器里装的是opencv-python运行时会报一个很经典的错error: the function/feature is not implemented (unknown/unsupported A...)这通常就是系统缺少 GTK/Qt 依赖导致的。解决办法是不折腾 GUI直接换 headless 版本。Ubuntu 上如果要用 CUDA 或自研算法通常要从源码编译。这里要特别注意版本匹配OpenCV 4.x 需要 CMake 3.5 和较新的 GCC而 Ubuntu 18.04 自带的 GCC 7.5 编译 OpenCV 4.5 以上版本虽然能过但耗时很长。建议先用apt install libopencv-dev快速跑通再决定要不要源码编译。查看版本用pkg-config --modversion opencv4或cv2.__version__。5.2 Python 和 C 的选择建议原型用 Python部署用 C同一个检测算法用 Python 写和用 C 写开发效率完全不同。我的建议是原型阶段一律用 Python因为 OpenCV 的 Python 接口可以直接交互式调试用 Jupyter 一边看图一边调阈值非常方便。等到算法稳定了再移植到 C 用于产线部署。但移植过程有个经典麻烦Python 的 OpenCV 和 C 的 OpenCV 版本不一致导致算法结果有细微差异。比如cv2.findContours在 OpenCV 3.x 返回两个值在 OpenCV 4.x 返回两个值但 C 里findContours的接口从 3.x 到 4.x 也有变化。如果 Python 用的是 4.5C 用的是 4.2行为可能就不完全一样。所以项目一开始就锁定一个大版本比如都用 4.5.5避免不必要的兼容性问题。Qt6 集成 OpenCV 时常见的坑是 CMake 找不到 OpenCV_DIR。需要在 CMakeLists.txt 里显式指定路径或者设置CMAKE_PREFIX_PATH指向 OpenCV 安装目录。另外Qt6 的库和 OpenCV 的库可能都依赖不同版本的 FFmpeg如果运行时报找不到动态库多半是环境变量LD_LIBRARY_PATH没配好。Windows 下用 MinGW 编译 OpenCV 则需要确保编译器线程模型是 posix 版本否则会报链接错误。5.3 性能调优图像金字塔、ROI、多线程PCB 检测对实时性有要求虽然不用达到视频级 30fps但至少要在 1 秒内处理完一块板子。性能优化有几个立竿见影的手段。第一是缩小处理图像。如果只是做定位和粗检可以把原图缩小到原来的 1/2 甚至 1/4定位完成后在原始尺度上做精确检测。用cv2.pyrDown做金字塔下采样不仅快还能平滑一部分噪声。第二是只处理 ROI这在第 2.3 节已经说过了。第三是尽量复用图像缓存不要在循环里频繁cv2.cvtColor和cv2.GaussianBlur分配新内存把临时 Mat 放在循环外面。如果有多块板子并行检测可以用线程池把每块板子的处理任务丢到不同线程。OpenCV 内部本身有一些并行机制但多数函数不会自动跨线程加速。用 Python 的话concurrent.futures.ThreadPoolExecutor就能把 CPU 用起来但要注意 GIL 限制真正的性能提升还是在 C 里用std::thread或 OpenMP。我在产线上最终用的是 C 版本四核工控机可以稳定做到 0.6 秒一块板满足节拍要求。5.4 常见错误排查清单整理几个我调试时遇到的典型报错做一个快速排查表格。下面这些热词里提到的错误相信很多人都搜过。错误信息可能原因处理方法ModuleNotFoundError: No module named cv2没安装 opencv-python或虚拟环境未激活pip install opencv-python检查当前 Python 环境error: (-2:Unspecified error) The function is not implemented编译时缺少 GTK / Qt 支持运行时 GUI 功能不可用换opencv-python-headless或在编译时开启WITH_QTONCould not find a package configuration file provided by OpenCVCMake 找不到 OpenCV设置OpenCV_DIR为包含OpenCVConfig.cmake的目录undefined reference to cv::imreadC 链接库顺序错误或没有链接 opencv_imgcodecs检查 CMakeLists 的 target_link_libraries图像颜色不对红蓝通道互换把 BGR 图像直接当 RGB 显示显示前cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)这些坑单独看都不大但组合在一起会消耗大量时间。建议在项目开始前把环境固定下来写进 README 或 Dockerfile否则过两周再回来看可能连自己的环境都复现不了。6. 把系统往生产线推稳定性和扩展性思考6.1 从 Demo 到产线的差距光源变化、震动、相机抖动演示环境下跑得好好的检测代码上了产线可能一天误报上百次。原因不外乎几个环境光变化、设备震动导致图像模糊、相机位置松动导致图像偏移。我在项目里做了几件事来提升稳定性。首先是物理屏蔽环境光。在检测工位外加遮光罩让外部灯光变化不影响成像。其次是加入动态基线更新机制系统每隔一段时间采集一张标准板图像更新模板图这样即使光源缓慢衰减模板也能跟着变化。最后是定时校验相机位置可以放一个固定的基准点每次检测前先定位基准点如果位置偏移超过阈值就报警。算法的稳定性也要靠阈值自适应。不要用写死的固定阈值而是根据图像灰度均值动态调整 Canny 低阈值或者根据差分图的灰度分布自动计算二值化阈值。OpenCV 的cv2.threshold和cv2.adaptiveThreshold都能用但自适应阈值在小面积 ROI 上更稳。差分图如果整体灰度偏高说明光照变化大这时可以提高差分判断阈值避免整版误报。6.2 结合深度学习的混合路线YOLO 粗筛加 OpenCV 精测如果检测项太复杂例如元件方向反了、多种型号混料、丝印字符缺失传统视觉的规则会变得很长很难维护。这时候可以考虑混合路线用 YOLO 做目标检测和缺陷粗筛再用 OpenCV 做精确轮廓测量和尺寸判定。热词里“opencv测量yolo图片中物体大小”其实就对应这个场景。实现思路是训练一个 YOLO 模型识别 PCB 板上的元件或缺陷类别比如电容、电阻、芯片、桥连区域。YOLO 输出每个目标的边界框、类别和置信度。接着对边界框内的图像用 OpenCV 做二值化、轮廓提取得到目标的精确边缘再计算像素面积、外接矩形尺寸、重心坐标等。这样做的好处是YOLO 负责“找出潜在问题区域”OpenCV 负责“精确量化问题”两个引擎各司其职。YOLO 的漏检率可以通过降低置信度阈值来弥补即使它框出来的区域不是缺陷OpenCV 精确测量后也能把它过滤掉。这种混合方案在速度和准确率上比纯深度学习推理更容易落地因为传统视觉的量化逻辑完全可控不会出现黑盒误判。6.3 数据记录与可视化界面让现场人员愿意用起来一套检测系统如果只有一个命令行窗口现场操作人员很难愿意用。我后来给系统加了一个简单的 Qt 界面左边显示当前相机画面右边显示检测结果列表缺陷区域用红色框标出同时保留原图文件。这个界面用 PySide6 或 Qt6 写都行本质上是把 OpenCV 处理结果实时显示到控件上。需要关注的点是图像数据在 OpenCV Mat 和 Qt QImage 之间的转换注意 BGR 和 RGB 的通道顺序。数据记录同样重要。我会把每次检测的板子 ID、时间、缺陷类型、缺陷坐标、留存图片路径写入 CSV 或 SQLite。这样产线质量回溯非常方便出现大量误报时还能按时间回放图像分析是光源问题还是算法问题。缺陷图片按日期分目录存放超过一定量自动清理避免工控机硬盘被塞满。最后再分享一个心得在给缺陷分类时不要追求把所有异常都归到一个“其他”类。哪怕只是粗分成“缺件”“偏位”“桥连”“划痕”四个标签后续统计分析就能告诉你产线最重要的改进方向。OpenCV 能处理好几何差异类的检测深度学习能处理语义判断类的检测把两者的边界划分清楚这套系统才会越来越得心应手。本文还有配套的精品资源点击获取