前言
我们在对halcon二次开发嵌入到c++或者c#的时候都是在编译的时候把halcon算子编辑好的,但是我们还可以在发布使用的时候直接调用hdev文件来处理随时修改算法。不需要重新编译。
本次基于C#和halcon的配合使用
一、引入.net库
本次引用的halcon库不仅仅是halcondotnet.dll,还需要引入hdevenginedotnet.dll
二、代码示例
1.halcon代码
lowNum:=0
maxNum:=50
MyDecompose (Image, Image1, Image2, Image3, Region, lowNum, maxNum, Number)
MyDecompose_Password (Image, Image1, Image2, Image3, Region, lowNum, maxNum, Number)
2.C# 代码
static void Main(string[] args)
{
//加载halcon程序
HDevProgram program = new HDevProgram("1.hdev");
//获取变量名称内容 low high size Number
HTuple hParamName = program.GetCtrlVarNames();
//获取子函数名称 runImage scale_image_range
HTuple hFunName = program.GetLocalProcedureNames();
//选择要执行的子函数
HTuple hfName = hFunName.TupleSelect(1);
HDevProcedure hpd = new HDevProcedure(program, hfName);
//设置子函数输入参数
HDevProcedureCall hpdc = hpd.CreateCall();
hpdc.SetInputCtrlParamTuple("lowNum", 0);
hpdc.SetInputCtrlParamTuple("maxNum", 100);
HObject ho_Image;
HOperatorSet.ReadImage(out ho_Image, "1.png");
hpdc.SetInputIconicParamObject("Image",ho_Image);
//执行halcon 算子
hpdc.Execute();
//获取函数运行的对象结果
HObject HO1 = hpdc.GetOutputIconicParamObject("Image1");
HTuple Number = hpdc.GetOutputCtrlParamTuple("Number");
HOperatorSet.WriteImage(HO1, "bmp", 0, "2.bmp");
int Num = Number.I;
也可以直接运行函数在halcon内部设置好参数
//HDevProgramCall hc1 = program.Execute();
//HTuple vd = hc1.GetCtrlVarTuple("Number");
}
总结
源码:C#调用hdev文件