news 2026/10/28 3:17:34

一套开源、可扩展的 WPF + Halcon 工业视觉平台,既好看又实用(附源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一套开源、可扩展的 WPF + Halcon 工业视觉平台,既好看又实用(附源码)

前言

在工业视觉检测领域,一个灵活、可扩展且界面美观的软件平台,往往能显著提升开发效率和现场调试体验。在参与多个机器视觉项目的过程中,深切感受到:市面上的通用工具要么封闭性强,难以定制;要么配置繁琐,无法快速适配不同应用场景。

本文介绍一款基于 WPF 开发的视觉平台,采用 HandyControl 对界面进行美化,集成 Halcon 强大的图像处理能力,并以 MVVM 模式组织代码,在功能性与易用性之间取得了良好平衡。

项目介绍

项目是一个基于插件机制的视觉检测平台,整体采用模块化设计。主程序负责流程调度、界面呈现与用户交互,而具体的图像处理逻辑则封装在独立的插件中,通过 PluginBase 接口统一调用。

这样设计算法可以专注于算子开发,无需关心 UI 或流程控制;同时,系统支持动态加载插件,便于后期功能扩展或现场替换。项目结构清晰,包含日志管理、参数绑定、流程图编辑、Halcon 对象可视化等关键模块,已初步形成一个小型但完整的视觉开发环境。

项目功能

1、支持 Halcon 图像(HImage)与区域(HRegion)的实时显示与交互;

2、提供可视化流程图编辑功能,通过节点(ProcessNode)连接构建图像处理流程;

3、实现参数自动绑定机制,上游节点输出可直接作为下游节点输入,减少手动配置;

4、内置插件菜单系统,可动态加载并管理各类视觉算子插件;

5、集成日志管理模块(LogMgr),支持运行时信息记录与查看。

项目技术
  • UI 框架:基于 WPF 桌面界面和 HandyControl 现代化控件(如圆角窗口、动画按钮、通知弹窗等)。

  • 图像算法库:集成 Halcon 12,调用其高性能算子实现图像采集、处理与分析。

  • 架构模式:采用 MVVM 模式,通过 mvvmlight 实现视图与逻辑解耦,支持命令绑定、消息通信与 ViewModel 生命周期管理。

  • 数据处理:使用 Newtonsoft.Json 进行配置文件读写与插件参数序列化,便于流程保存与加载。

功能模块

  • 日志系统:统一记录运行状态、错误信息与调试输出,支持分级管理和界面实时查看。

  • 算子插件机制:所有图像处理功能以插件形式封装,通过 PluginBase 接口动态加载,便于扩展与维护。

  • 插件菜单:自动扫描插件目录,生成可交互的工具菜单,支持分类展示与快捷调用。

  • 可视化流程图:通过节点(ProcessNode)拖拽连线,构建图像处理流水线,直观呈现算法执行顺序。

  • 参数自动绑定:上游节点输出可自动映射为下游节点输入,减少手动配置,提升流程搭建效率。

  • Halcon 对象显示:支持 HImage 和 HRegion 的实时渲染,结果可叠加显示在原图上,便于调试与验证。

项目代码

1、将 Halcon 的 HObject(通常是 HImage)转换为 WPF 可直接显示的 BitmapImage 对象。

2、由于 Halcon 和 WPF 使用不同的图像表示方式,不能直接互通,因此需要通过"保存到临时文件 → 读取为 BitmapImage → 调整 DPI → 再转回内存流“”的方式完成转换。

private static BitmapImage ConvertHImageToBitmapImage(object img) { if (img == null) returnnull; string tempFolderPath = Path.GetTempPath(); // 生成唯一的文件名,例如使用GUID,并假设图片格式为png string fileName = Guid.NewGuid().ToString() + ".bmp"; // 组合完整的文件路径 string filePath = Path.Combine(tempFolderPath, fileName); if (img == null) { int c = 10; } elseif (img is HObject) { int b = 10; } else { } HObject obj = img as HObject; HImage image = new HImage(obj); if (BackgroundImage == null) { BackgroundImage = image; } image.WriteImage("bmp", 255, filePath); BitmapImage originalBitmap = new BitmapImage(); originalBitmap.BeginInit(); originalBitmap.UriSource = new Uri(filePath, UriKind.Absolute); originalBitmap.CacheOption = BitmapCacheOption.OnLoad; originalBitmap.EndInit(); // 创建新的 BitmapSource 并设置标准 DPI int stride = originalBitmap.PixelWidth * ((originalBitmap.Format.BitsPerPixel + 7) / 8); byte[] pixelData = newbyte[originalBitmap.PixelHeight * stride]; // 复制像素数据 originalBitmap.CopyPixels(pixelData, stride, 0); BitmapSource correctedBitmap = BitmapSource.Create( originalBitmap.PixelWidth, // 640 originalBitmap.PixelHeight, // 480 96, // 标准 DPI X 96, // 标准 DPI Y originalBitmap.Format, originalBitmap.Palette, pixelData, originalBitmap.PixelWidth * ((originalBitmap.Format.BitsPerPixel + 7) / 8)); correctedBitmap.Freeze(); File.Delete(filePath); BitmapImage bitmapImage = new BitmapImage(); using (MemoryStream memoryStream = new MemoryStream()) { // 将 BitmapSource 编码为 BMP 并保存到内存流 BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(correctedBitmap)); encoder.Save(memoryStream); memoryStream.Position = 0; // 从内存流加载到 BitmapImage bitmapImage.BeginInit(); bitmapImage.StreamSource = memoryStream; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); } return bitmapImage; }

项目效果

启动软件后,可看到主界面左侧为插件菜单,中间为流程图编辑区,右侧为参数与日志面板。拖拽插件节点到画布,连接输入输出端口,即可构建完整检测流程。

运行时,Halcon 处理结果(如边缘、缺陷区域)能实时叠加显示在原图上。日志窗口同步输出关键步骤信息,便于调试。

项目源码

使用前需注意:

1、项目中重新引用本地 Halcon 安装目录下的 HalconDotnet.dll;

2、确保运行环境已安装 Halcon 运行时(含 halcon.dll);

为了防止丢失,可以在评论区留言关键字「视觉平台」,即可获取完整源码地址。

总结

本项目是一个面向工业视觉平台的架构原型。它没有炫酷的 AI 功能,也没有复杂的数据库集成,但提供了一套清晰、实用且贴近实际工业场景的开发示例。

对于希望从零开发视觉系统的大家,或想深入理解 WPF 与 Halcon 集成架构的同学,这个项目或许能帮你节省大量摸索时间。技术终会迭代,但良好的设计思想值得传承。欢迎在此基础上继续完善,也期待听到大家的使用反馈!

关键词

#WPF、#Halcon、#视觉检测、#插件化、#MVVM、#HandyControl、#流程图、C#、#图像处理、#工业软件、#机器视觉

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 17:50:55

设计模式-适配器模式

引言 我们常常会遇到这样的情况:现有的类功能强大,但接口却与我们当前系统的需求不匹配。这就好比你有一把性能卓越的钥匙(现有类),但锁眼(系统接口需求)却对不上。适配器模式就如同一位神奇的工…

作者头像 李华
网站建设 2026/10/27 3:01:08

Audacity音频处理指令由LobeChat智能生成

Audacity音频处理指令由LobeChat智能生成 在播客制作、语言教学或有声书编辑的日常工作中,一个常见的挑战是:如何高效地从长达数小时的录音中提取有效内容?传统方式往往依赖手动选区、反复试错和对软件功能的深度掌握——这不仅耗时费力&…

作者头像 李华
网站建设 2026/10/27 20:39:55

桌游规则说明:LobeChat清晰解释复杂机制

LobeChat:让复杂桌游规则变得清晰易懂 在智能家居设备日益复杂的今天,确保无线连接的稳定性已成为一大设计挑战。不过今天我们不聊硬件,而是把目光转向另一个“复杂系统”——桌面游戏。像《瘟疫危机》《卡坦岛》这类现代桌游,动辄…

作者头像 李华
网站建设 2026/10/27 5:46:23

无人机视觉锁定与目标跟踪技术深度解析(含完整代码)

前言 最近在做一个无人机自主跟踪的项目,踩了不少坑,也积累了一些经验。这篇文章把视觉锁定这块的核心技术点整理一下,从原理到代码实现都会涉及,希望对有类似需求的朋友有所帮助。 视觉锁定说白了就是让无人机"盯住"一个目标不放,听起来简单,实际做起来会遇…

作者头像 李华
网站建设 2026/10/28 15:01:38

图像人形凸显算法深度剖析:从人像分割到背景虚化的完整实现

前言 最近在做一个手机端的人像处理SDK,需要实现类似iPhone人像模式的效果。研究了一段时间,把核心技术点整理出来分享一下。 所谓"人形凸显",本质上就是把人从背景中"拎"出来,然后对背景做模糊或者其他处理,让人物主体更加突出。听起来简单,但要做…

作者头像 李华
网站建设 2026/10/28 1:19:42

LobeChat能否对接Tesla API?车辆状态查询与远程控制

LobeChat能否对接Tesla API?车辆状态查询与远程控制 在智能家居设备日益复杂的今天,人们早已不再满足于“点按操作”的交互方式。语音助手、AI管家、自动化场景——这些曾经属于科幻的设想,正逐步渗透进我们的日常生活。而当人工智能遇上智能…

作者头像 李华