C# 中调用 Halcon 算子主要有三种方式选择哪种取决于你对“算法与界面解耦程度”和“开发效率”的权衡。方式一直接调用 Halcon 库halcondotnet.dll这是最灵活的方式。在 C# 项目中引用halcondotnet.dll后你可以用函数式HOperatorSet.ReadImage或对象式new HImage直接调用任何 Halcon 算子。案例分析模板匹配usingHalconDotNet;// 读取模板图像创建形状模型HObjecttemplateImage;HOperatorSet.ReadImage(outtemplateImage,template.png);HTupleshapeModel;HOperatorSet.CreateShapeModel(templateImage,auto,-0.39,0.79,auto,auto,use_polarity,auto,auto,outshapeModel);// 在搜索图中查找模板HObjectsearchImage;HOperatorSet.ReadImage(outsearchImage,search.png);HTuplerow,column,angle,score;HOperatorSet.FindShapeModel(searchImage,shapeModel,-0.39,0.79,0.5,1,0.5,least_squares,0,0.9,outrow,outcolumn,outangle,outscore);// row/column 是匹配位置angle 是旋转角度score 是匹配得分这种方式代码紧凑但每改一次算法都要重新编译整个程序。适合算法逻辑稳定的项目。方式二使用 Halcon 引擎HDevEngineHDevEngine 是一个解释器在 C# 中运行时加载并执行独立的.hdev或.hdvp脚本文件。算法工程师改完 Halcon 脚本C# 程序不用重新编译就能生效。案例分析调用外部过程HDevEngineenginenewHDevEngine();engine.SetProcedurePath(C:\HalconProcedures);// 脚本目录// 加载过程文件注意这里会编译一次有语法错误会立刻抛出HDevProcedureprocnewHDevProcedure(detect_fin);HDevProcedureCallcallnewHDevProcedureCall(proc);// 设置输入参数call.SetInputIconicParamObject(Image,image);// 执行call.Execute();// 获取输出参数HTuplefinAreacall.GetOutputCtrlParamTuple(FinArea);HRegionfinRegioncall.GetOutputIconicParamObject(FinRegion);核心价值算法工程师在 HDevelop 中调试好的脚本直接部署到现场C# 端只负责调用和展示。支持运行时热更新产线换型时无需停机重编译。注意事项HDevEngine 抛出的HDevEngineException包含详细信息——错误类别、消息、过程名、行号、Halcon 错误码建议在 C# 端完整展示便于排查。方式三Halcon 代码导出在 HDevelop 中调试好算法后选择“文件 → 导出 → C# - HALCON/.NET”HDevelop 会生成一个.cs文件。把生成的代码粘贴到你的工程中即可。这种方式上手最快适合初学者快速验证。但导出的代码通常比较冗长且与 Halcon 环境耦合较深不便于后续维护。三种方式对比与选择方式核心优势主要代价适用场景直接调用库灵活性最高可精细控制每一步需熟悉算子接口算法改动需重编译算法稳定、追求性能的中大型项目HDevEngine算法与界面分离支持热更新需管理脚本文件运行时依赖引擎算法频繁迭代、需要现场调参的项目代码导出开发最快直观代码冗长耦合深快速原型、算法固定的简单项目选择建议工业项目通常采用混合模式——核心算法封装为.hdvp脚本由 HDevEngine 调用基础图像操作显示、格式转换直接调库界面显示用HWindowControl。这样既保留了算法热更新的灵活性又保证了基础操作的性能。