方式一:c#代码中手动调用halcon算法库
优点:代码简洁易阅读,算法效率最佳
缺点:难以调试,且需要自己记得释放对象,影响工作效率,不推荐使用此方式
方式二:halcon软件把程序或者函数导成c#代码
1.程序即hdev文件导成c#代码
只需要action方法里的代码
优点:方便调试,算法执行效率高
缺点:代码较难阅读,代码量较多
建议: halcon开发中提前将交互变量规范化,逻辑判断尽量在halcon上写好,减少halcon导成c#代码后的c#代码改动,提高开发效率
2.外部函数即hdvp文件导成c#代码
优点:方便调试,算法执行效率高
缺点:代码较难阅读,代码量较多,调试时需写主方法程序进行联合调试
方法Test就是halcon外部函数Test的定义
方式三:c#调用halcon引擎
1.调用halcon程序即hdev文件(不可以设置输入参数,仅可获取输出参数)
HDevProgram hDevProgram = new HDevProgram(programPath + hDevProgramFileName);
HDevProgramCall hDevProgramCall = new HDevProgramCall(hDevProgram);//halcon程序调用类
hDevProgramCall.Execute();//执行算法
double radiu= hDevProgramCall.GetCtrlVarTuple("radiu").D;//获取变量值
优点:在进行算法迭代时只需迭代hdvp文件,而不需要更改c#代码,开发效率高
缺点:调用耗时较长,hdvp文件要随运行环境迁移
2.调用halcon外部函数即hdvp文件(可设置输入参数,也可以获取输出参数)
HDevEngine devEngine = new HDevEngine();//引擎类
devEngine.SetProcedurePath(procedurePath);//设置外部函数文件调用路径
HDevProcedure hDevProcedure = new HDevProcedure(hDevProcedureName);//hdvp文件名(方法名称)
hDevProcedureCall = new HDevProcedureCall(hDevProcedure);//外部函数调用类
hDevProcedureCall.SetInputIconicParamObject("in_image", GetHObject());//设置输入参数
hDevProcedureCall.Execute();//执行算法
double radiu= hDevProcedureCall.GetOutputCtrlParamTuple("radiu").D;//获取输出参数
优点:在进行算法迭代时只需迭代hdvp文件,而不需要更改c#代码,开发效率高
缺点:调用halcon引擎耗时长,hdvp文件要随运行环境迁移
建议:可使用多线程处理图像算法