一、项目背景与核心业务
基于 Qt+C与海康VisionDesignerSDK 开发的工业视觉缺陷检测系统。该软件面向工业产线质检场景,主要实现一维码、二维码、文字图案识别,以及产品外观缺陷检测。主要有模板建模、检测区域配置、批量图像算法检测、结果可视化等几个核心模块。
二、整体架构与技术栈
技术栈以C/Qt为基础,结合海康VisionDesignerSDK开发。
整体分为四层架构:
UI交互层:基于Qt原生控件+自定义控件,实现界面布局、图片展示、交互式ROI绘制、参数面板联动;
业务逻辑层:核心窗口类统筹图像管理、信号转发、状态控制、索引同步;
算法调度层:封装独立工作类,运行在子线程中执行耗时视觉算法;
底层SDK层:对接海康仿射变换、特征匹配、缺陷检测等SDK能力,完成底层图像运算与检测。
三、核心功能与实现细节
1.全局图像统一管理
封装了单例图像管理器M_IMagemanager,统一负责图片加载、新增、删除、清空等操作,并对外抛出对应信号。
子窗口监听图像变更信号,自动同步界面图片列表;当图片被删除时,代码会批量修正模板索引、当前选中索引、结果缓存索引,保证所有数据下标对齐,避免索引错乱、程序异常。
同时使用QMap容器做双层缓存,分别缓存检测完成的结果图与检测框坐标,二次查看图片时直接读取缓存,无需重复运算,大幅提升交互效率。
2. 多类别、多ROI交互式绘制与联动
基于自定义绘图控件实现可视化ROI框选功能,也是项目核心交互模块:
1)系统区分一维码、二维码、文字图案三大检测类别,不同类别匹配特定绘制颜色,视觉上直观区分;
2)支持同一类别下绘制多个ROI:通过分类计数器对每一类检测框单独编号,每创建一个ROI,就自动生成对应的参数面板;
3)依靠哈希映射表建立ROI唯一ID与参数面板的绑定关系,实现双向联动:在画布选中检测框,右侧参数面板自动高亮;点击参数面板,画布自动定位并选中对应ROI;删除ROI时,参数控件同步销毁,生命周期统一管理。
3. 模板建模流程
操作流程为:先加载标准无缺陷样本图作为模板图像,在模板上按需绘制各类检测ROI完成建模。系统会自动保存模板图像与所有检测区域信息,后续批量待测图片会基于这套模板执行统一检测,实现单模板、多区域、多类别并行检测。
4. 多线程批量算法检测
视觉匹配、缺陷检测属于高耗时计算,为了防止UI主线程阻塞、界面卡顿,我将所有算法逻辑封装到独立工作类中,并放入子线程执行。
代码中增加原子状态标记管控任务状态,避免重复启动检测任务;算法运行期间自动禁用操作按钮,防止误触发。检测完成后通过Qt信号槽将结果回传给UI,在原图上绘制检测结果框,同时完成数据缓存与界面刷新。线程退出时严格执行退出与等待逻辑,保证线程正常回收,无残留。
5. 第三方SDK集成
深度对接海康MVD全套视觉SDK,包含图像读写、矩形区域创建、特征模板匹配、外观缺陷检测等能力。开发中严格遵循SDK规范,所有图像、工具、形状句柄都做到局部创建、使用完毕立即销毁,并搭配异常捕获,避免资源泄漏。
四、项目总结
整套模块从UI交互、业务逻辑、多线程编程到第三方SDK集成完成了全流程落地,不仅实现了多类别、多区域视觉检测的核心业务,也通过内存、线程、资源多维度优化,满足工业现场长时间稳定运行的要求。
通过这个项目,我扎实掌握了Qt自定义控件、信号槽、多线程开发、第三方C++SDK集成,也积累了工业软件在稳定性、异常处理、内存管控方面的实战经验。