当前位置: 首页 > news >正文

C# + Halcon 打造你的可视化机器视觉流程编辑器

前言

在工业视觉检测系统中,流程的灵活性和可配置性至关重要。传统硬编码方式难以应对多变的产线需求,而通过图形化流程编排,用户可以像搭积木一样组合图像处理步骤,极大提升了开发效率与系统适应性。

本文介绍一个基于 C# 与 MVTec HALCON 开发的轻量级可视化流程编辑器,它支持拖拽式节点构建、节点间连线逻辑定义,并集成了 HALCON 的核心图像处理能力,如模板创建、匹配、ROI 绘制等。

项目介绍

项目是一个面向机器视觉应用的流程编排工具,采用 WinForms 开发界面,底层调用 HALCON .NET 接口(HalconDotNet)实现图像算法功能。

通过主界面左侧的工具栏选择不同功能模块(如"加载图像"、"绘制 ROI"、"创建模板"、"模板匹配"等),将其拖入中央的流程编辑区域,形成节点;再通过"连线"功能建立节点间的执行顺序与数据流向,最终实现一键运行整个视觉流程。

项目功能

1、模块化工具面板

提供图像加载、ROI 绘制、模板创建、模板匹配等常用视觉操作入口。

2、拖拽式节点生成

用户可将工具项拖入编辑区,自动生成带名称的流程节点(FlowNode)。

3、节点自由移动

支持在编辑区域内拖动节点调整布局,边界限制防止移出可视区域。

4、可视化连线机制

通过"连线"模式点击两个节点,自动绘制带箭头的连接线,表示数据流向。

5、流程执行引擎

点击"单次执行"即可按连线顺序依次调用各节点的处理逻辑。

6、HALCON 深度集成

每个节点对应具体的 HALCON 操作,如读图、绘制矩形、创建形状模型、执行匹配等。

7、结果可视化

匹配结果以红色轮廓叠加显示,并标注坐标与十字准星,便于调试。

项目特点

低耦合设计:流程节点(FlowNode)与具体算法逻辑解耦,便于扩展新功能模块。

所见即所得:流程结构与执行逻辑一致,用户能直观理解数据流动路径。

交互友好:拖拽、点击、连线等操作符合常规图形编辑习惯,学习成本低。

轻量高效:未依赖复杂框架,基于原生 WinForms 和 GDI+ 绘制连线,运行流畅。

面向实际场景:覆盖从图像输入、预处理、模板训练到匹配输出的完整闭环。

项目技术

  • HalconDotNet:调用 HALCON 的 .NET 接口,实现图像读取、ROI 操作、形状模型创建与匹配等高级视觉算法。

  • GDI+ 绘图:使用Graphics.DrawLines绘制带圆角和箭头的连接线,通过重写Paint事件确保连线随窗口刷新。

  • 事件委托封装:通过MouseEventHelper.RegistryMouseEvent统一注册节点的鼠标事件,提升代码复用性。

  • 状态管理:引入DrawState枚举区分"普通"与"连线"模式,控制用户交互行为。

  • 异步执行:流程运行置于Task.Run中,避免 UI 线程阻塞。

项目源码

主窗体核心逻辑如下(已省略部分辅助方法):

using System.Drawing.Drawing2D; using Vision.Flow.Proj.VControl; using Vision.Flow.Proj.VHelper; namespaceVision.Flow.Proj { publicpartialclassForm1 : Form { private Label lbl; privatebool isMoving; private Point startPoint; private DrawState drawState = DrawState.Noramal; private FlowNode node1; privateint nodeNo = 0; private FlowNode node2; // ... 初始化及菜单控制代码 ... private void Pl_FlowProcess_DragDrop(object sender, DragEventArgs e) { var container = sender as Control; var flowNode = new FlowNode(); MouseEventHelper.RegistryMouseEvent(flowNode, NodeMouseDown, MouseEventName.MouseDown); MouseEventHelper.RegistryMouseEvent(flowNode, NodeMouseMove, MouseEventName.MouseMove); MouseEventHelper.RegistryMouseEvent(flowNode, NodeMouseUP, MouseEventName.MouseUp); MouseEventHelper.RegistryMouseEvent(flowNode, NodeClick, MouseEventName.MouseDown); flowNode.NodeName = lbl.Text; flowNode.Location = container.PointToClient(new Point(e.X, e.Y)); container.Controls.Add(flowNode); } private void NodeClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && drawState == DrawState.DrawLine) { var control = sender as Control; if (nodeNo == 0) { node1 = (FlowNode)control.Parent; nodeNo = 1; } elseif (nodeNo == 1) { node2 = (FlowNode)control.Parent; if (!node1.Equals(node2)) { node1.NextNode = node2.NodeID; node2.PreNode = node1.NodeID; nodeNo = 0; DrawPointToPointLine(node1, node2); drawState = DrawState.Noramal; } } } } private void DrawJoinLine(Point p1, Point p2, LineForward forward) { Graphics g = Pl_FlowProcess.CreateGraphics(); g.SmoothingMode = SmoothingMode.HighQuality; Pen p = new Pen(Color.DarkRed, 5) { DashStyle = DashStyle.Solid, StartCap = LineCap.Round, EndCap = LineCap.ArrowAnchor }; Point inflectPoint1, inflectPoint2; if (forward == LineForward.L_R || forward == LineForward.R_L) { inflectPoint1 = new Point((p1.X + p2.X) / 2, p1.Y); inflectPoint2 = new Point((p1.X + p2.X) / 2, p2.Y); } else { inflectPoint1 = new Point(p1.X, (p1.Y + p2.Y) / 2); inflectPoint2 = new Point(p2.X, (p1.Y + p2.Y) / 2); } g.DrawLines(p, new Point[] { p1, inflectPoint1, inflectPoint2, p2 }); } privatevoid 单次执行ToolStripMenuItem_Click(object sender, EventArgs e) { Task.Run(() => { var tool = new FlowControlTool(myhctl, Pl_FlowProcess); tool.FlowRun(); }); } } }

配套的节点配置窗口(如ModelResultFrmDrawROIFrmCreateModelFrm)则负责与 HALCON 交互,完成具体算法参数设置与执行。

项目效果

启动程序后,先看到简洁的主界面:左侧为可折叠的功能菜单,中央是空白的流程编辑区。点击"图像处理"或"模型"菜单,展开对应工具按钮。

将"加载图像"拖入编辑区,双击可设置图片路径;再拖入"绘制 ROI",在其上操作可框选区域;接着添加"创建模板"和"模板匹配"节点,并依次连线。

点击"单次执行",系统自动按顺序调用各节点逻辑,在 HALCON 控件中实时显示处理结果——匹配成功的轮廓以红色高亮,并输出精确坐标。整个过程无需编写一行代码,真正实现了"可视化编程"。

项目源码

为了防止丢失,可以在评论区留言关键字「流程编辑器」,即可获取完整源码地址。

总结

该流程编辑器虽为轻量级实现,但完整展示了如何将 HALCON 强大的图像处理能力与可视化流程编排相结合。它不仅降低了非程序员使用机器视觉算法的门槛,也为开发提供了快速原型验证的工具。

未来可进一步扩展节点类型、支持流程保存/加载、加入条件分支与循环结构,向更成熟的视觉平台演进。对于中小型视觉项目或学习演示,此类工具具有很高的实用价值。

关键词

C#、#Halcon、#流程编辑器、#可视化编程、#机器视觉、#WinForms、#GDI+、#模板匹配、#ROI、#节点连线

http://www.jsqmd.com/news/338536/

相关文章:

  • 基于SSM二手物品交易网站系统(源码+lw+部署文档+讲解等)
  • .NET 10 与智能体时代的架构演进:以 File-Based Apps 为核心的 C# 生态重塑
  • 基于SpringBoot实现的云宠之家管理系统(源码+lw+部署文档+讲解等)
  • 告别抽卡式AI视频,这个开源项目让剧本一键变成片!
  • 2026年旧衣物开花机设备推荐:济南鑫金龙机械,纤维/废布/废棉/化纤块开花机全系供应 - 品牌推荐官
  • 2026年高空安全防护设备推荐:加安和诺垂直/水平生命线系统及装置全解析 - 品牌推荐官
  • 基于SpringCloud的分布式演唱会抢票系统(源码+lw+部署文档+讲解等)
  • 三步快速摸清陌生研究领域,轻松搞定文献调研
  • Qoder 上线首个定制模型,5个月完成“模型-智能体-产品”全形态布局
  • 国产化备份“山河图”
  • MPI 广播一个数组代码示例
  • 一份来自40000+次真机评测的具身智能年度报告!RoboChallenge打破Demo滤镜:最强模型也只有51%成功率
  • Maven踩坑指南:依赖冲突专治不服,范围聚合玩明白!
  • 重庆集训比赛记录
  • 2026年老旧电梯维保优质厂家推荐榜:济南电梯保养、济南电梯改造、济南电梯更新、济南电梯维修、电梯保养、电梯更新选择指南 - 优质品牌商家
  • Servlet入门保姆级教程:从0到1搞定Tomcat与Web开发
  • 调查:超1/4游戏开发者近两年遭解雇,近一半仍未找到新工作;阿里自研AI芯片“真武”亮相;华为手机全系降价,最高达4000元 | 极客头条
  • 编程门槛被压到799美元?“那个拿着Mac Mini+Claude的「门外汉」,抢走了程序员3个月的活!”
  • 九江濂溪区桶装水配送 - 中媒介
  • DeepMind的PYSC2环境——报错:pygame.error: Unable to make GL context current
  • 进口金库门哪里买 - 中媒介
  • 饲料烘干机、中药材干燥机、中药材烘干机、农业干燥机、化工原料烘干机、化工干燥机、四川干燥机厂家、四川烘干机厂家选择指南 - 优质品牌商家
  • 我的常用软件
  • 2026年锂电池厂家权威推荐榜:户外太阳能路灯、新农村太阳能路灯、老年车锂电池、货三轮锂电池、道路太阳能路灯、高杆太阳能路灯选择指南 - 优质品牌商家
  • 金库安全屋适合别墅安装吗? - 中媒介
  • 网上课程学习系统毕业论文+PPT(附源代码+演示视频)
  • 三合安防金库门技术优势(ECB-S V级认证) - 中媒介
  • 基于Android的大学生食堂点餐平台的设计与实现(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 基于SpringBoot和Vue的物联网仓储管理系统(源码+lw+部署文档+讲解等)
  • 隐形金库门与传统金库门安全性对比 - 中媒介