一、项目背景与核心业务
本系统是基于 Qt/C++ 并结合海康 VisionDesigner SDK 开发的工业视觉缺陷检测软件,主要面向生产线上的质量检测场景。系统核心能力包括:一维码 / 二维码识别、字符与图案识别,以及产品表面缺陷检测。主要功能模块涵盖模板建模、检测区域配置、批量图像算法检测及结果可视化展示。
二、整体架构与技术选型
技术选型以 C++ 与 Qt 为基础,上层调用海康 VisionDesigner SDK 完成视觉算法计算。整体采用分层设计,共分为四层:
UI 交互层:借助 Qt 原生控件与自定义绘图组件,完成界面布局、图像显示、交互式 ROI 圈选及参数面板联动。
业务逻辑层:由核心窗口类负责整体图像数据管理、信号与槽的转发、界面状态控制及索引同步等协调工作。
算法调度层:封装独立的工作线程类,在子线程中运行耗时的视觉算法,避免阻塞 UI。
底层 SDK 层:对接海康视觉库中的仿射变换、特征匹配、缺陷检测等能力,完成底层图像运算与检测任务。
三、核心功能与实现细节
全局图像统一管理
设计并实现了一个单例图像管理类 M_IMagemanager,集中负责图片的加载、新增、删除与清空操作,并在数据变化时向外发送相应信号。其他子窗口监听这些信号后,能够自动刷新界面中的图片列表。当某张图片被删除时,系统会自动修正模板索引、当前选中索引以及结果缓存的索引,确保所有数据下标保持一致,杜绝因索引错乱而导致的程序异常。
此外,利用 QMap 容器构建两级缓存,分别存储已经检测完成的结果图与检测框坐标信息。当用户再次查看某张图片时,系统直接从缓存中读取,无需重复执行检测算法,从而显著提升交互响应速度。
多类别、多 ROI 交互式绘制与联动
基于自定义绘图控件实现了可视化 ROI 框选功能,这是项目中关键的交互模块之一:
系统区分一维码、二维码、文字图案三大检测类型,每种类型对应不同的绘制颜色,便于视觉区分。
支持在同一类型下绘制多个 ROI:通过分类计数器为每类检测框分别编号,每新建一个 ROI 都会自动生成其对应的参数配置面板。
借助哈希映射表建立 ROI 唯一标识与参数面板之间的绑定关系,实现双向联动效果:在画布上选中某个检测框,右侧参数面板会自动高亮;反过来,点击参数面板中的条目,画布会定位并选中对应的 ROI;删除 ROI 时,相应的参数控件也会同步销毁,确保生命周期统一管理。
模板建模流程
具体操作步骤为:首先加载一张标准无缺陷的样本图像作为模板,然后在模板图像上根据需求绘制各类检测 ROI,完成建模配置。系统会自动保存模板图像以及所有检测区域的定义信息。后续对批量待测图片进行检测时,均基于这套模板执行统一的检测逻辑,实现“单模板 + 多区域 + 多类别”的并行检测。
多线程批量算法检测
由于特征匹配、缺陷检测等视觉算法计算量较大,为避免 UI 主线程阻塞和界面卡顿,将所有算法逻辑封装到独立的工作类中,并放置于子线程中运行。
代码中使用原子状态标记来管控任务状态,避免重复启动检测任务;算法运行期间会自动禁用相关操作按钮,防止用户误触发。检测完成后,通过 Qt 的信号槽机制将结果回传至 UI 层,在原图上绘制检测框,同时完成结果缓存与界面刷新。线程退出时严格遵循退出等待逻辑,保证线程资源正常回收,无残留。
第三方 SDK 集成
深度集成了海康 MVD 视觉开发包,涵盖图像读写、矩形区域创建、特征模板匹配、外观缺陷检测等能力。开发过程中严格遵循 SDK 使用规范,对图像、工具、形状句柄等资源做到局部创建、用后立即释放,并配合异常捕获机制,从源头避免资源泄漏。
四、项目总结
整套系统覆盖了从 UI 交互、业务逻辑、多线程编程到第三方 SDK 集成的完整落地流程,不仅实现了多类别、多区域的视觉检测核心业务,还在内存管理、线程调度、资源复用等方面进行了多重优化,能够满足工业现场长时间稳定运行的要求。
通过这个项目,我扎实掌握了 Qt 自定义控件、信号槽机制、多线程开发以及 C++ 第三方 SDK 的集成方法,并积累了工业软件在稳定性保障、异常处理、内存管控等方面的实战经验。