news 2026/6/15 15:20:42

当C#工程师决定搞机器视觉

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
当C#工程师决定搞机器视觉

C#联合halcon开发的通用视觉框架,可供初学者使用,是一C#联合halcon开发的通用视觉框架,可供初学者使用,是一 个不错的学习框架,发的是源码,发完不退货,发的是源码源码

最近在GitHub闲逛发现个有意思的玩意儿——用C#搭Halcon的轮子。这框架直接把Halcon的算子封装成流水线模式,对刚入坑机器视觉的新手相当友好。关键是源码全开放,拿过来就能当模板魔改。

先看个加载图像的代码片段:

public HalconImage LoadImage(string path) { HOperatorSet.ReadImage(out HObject image, path); return new HalconImage(image); }

这写法把Halcon的HObject对象包成了自己的HalconImage类型,后面处理时类型安全有保障。有意思的是作者把图像宽度高度直接封装成属性:

public int Width => _image.GetWidth(); public int Height => _image.GetHeight();

这种设计让刚接触Halcon的人不用死记GetImageSize算子,直接点属性就能拿到尺寸数据。

框架核心是这个处理管道:

public class VisionPipeline { private List<IVisionStep> _steps = new(); public void AddStep(IVisionStep step) => _steps.Add(step); public HalconImage Execute(HalconImage input) { var current = input; foreach (var step in _steps) { current = step.Process(current); if (current == null) throw new VisionException("流水线中断"); } return current; } }

典型的责任链模式实现,每个处理步骤实现IVisionStep接口。比如做个阈值分割:

public class ThresholdStep : IVisionStep { public int MinGray { get; set; } = 128; public int MaxGray { get; set; } = 255; public HalconImage Process(HalconImage input) { HOperatorSet.Threshold(input.HObject, out HObject region, MinGray, MaxGray); return new HalconImage(region); } }

新手改参数超方便,直接实例化步骤类设置属性就行。框架里还预置了十几款常用算子模板,从图像预处理到形态学操作都有现成的轮子。

异常处理部分有点意思:

try { pipeline.Execute(image); } catch (VisionException ex) { Logger.Write($"视觉处理翻车: {ex.Message}"); // 自动保存故障图像 SaveErrorImage(image); }

遇到错误自动保存问题图像,这个debug机制对新人很实用。毕竟Halcon报错信息经常让人摸不着头脑,有图有真相容易定位问题。

实测跑个二维码识别流程:

var pipeline = new VisionPipeline(); pipeline.AddStep(new GaussianFilterStep()); // 高斯滤波 pipeline.AddStep(new FindQRCodeStep()); // 识别二维码 pipeline.AddStep(new DrawResultStep()); // 绘制识别结果 var result = pipeline.Execute(image);

整个过程像搭积木一样,改处理步骤顺序就能尝试不同方案。框架里甚至自带了简易的HDevelop脚本转换工具,能把Halcon导出的代码转成C#调用格式。

要说不足的话,框架对异步处理的支持还比较初级,多相机同时采集时得自己加线程管理。但作为入门学习项目,这套代码足够让新人理解Halcon和C#的交互套路了。Git仓库里还有二十几个样例项目,从条形码识别到OCR都有现成参考,比啃官方文档直观得多。

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

高效率16KW三相PFC程序方案:华为R75020G1机上的软件编程设计与优化

高效率16KW三相PFC程序方案&#xff1a; 98.916%效率、功率因数0.9995、电流谐波2.287%&#xff0c;在三相交流源输入380Vac&#xff0c;输出720Vdc、16KW时。 一、本方案是在huawei充电模块R75020G1机上进行重新软件编程设计&#xff0c;省去客户花大量时间、人力、资金去做样…

作者头像 李华
网站建设 2026/6/15 14:36:49

IGIR-B卫星时码同步与B码解析的VHDL实现方案

IGIR-B卫星时码同步代码&#xff0c;vhdl实现B码解析&#xff0c;没有用任今天咱们来聊聊IGIR-B卫星时码同步的硬核实现。这个B码解析说白了就是个精确到微秒级的时钟同步活儿&#xff0c;用纯VHDL实现不用现成IP核&#xff0c;整个过程就像在FPGA上玩精密钟表拆装。先看B码信号…

作者头像 李华
网站建设 2026/6/15 13:00:18

Multisim示波器预触发功能设置:完整示例解析

深入掌握Multisim示波器预触发&#xff1a;从原理到实战的完整指南你有没有遇到过这样的情况&#xff1f;电路突然出问题&#xff0c;比如一个信号莫名其妙地跳变、复位异常或者电源跌落——但当你打开示波器查看时&#xff0c;只看到了“结果”&#xff0c;却不知道“原因”是…

作者头像 李华
网站建设 2026/6/15 12:59:38

labview通过AxtiveX操作excel,不需要NIReport.llb也可以生成报表

labview通过AxtiveX操作excel&#xff0c;不需要NIReport.llb也可以生成报表。听说有人嫌NI Report太笨重&#xff1f;来试试用LabVIEW直接调教Excel&#xff01;今天咱们手把手玩转ActiveX&#xff0c;不用任何第三方工具包&#xff0c;直接让Excel乖乖听话生成报表。先扔个硬…

作者头像 李华
网站建设 2026/6/15 13:00:23

料箱输送线程序:合流分拣控制与WCS、PLC的Socket接口详解

料箱输送线程序&#xff0c;有合流和分拣&#xff0c;个人认为精华部分是WCS和PLC的Socket接口和分拣控制程序。 提供设备布局图和电气图纸以及博途V16程序。 程序源自欧企&#xff0c;无加密&#xff0c;外企程序还是比较美观的&#xff0c;程序仅供学习参考&#xff0c;不讲解…

作者头像 李华