这一篇谈下C#调用hdvp外部函数要用到的动态修改传入参数的方法。
C#调用外部函数时,由于函数参数各异,你得对每个不同的函数编制调用程序,因此C#端代码量很大。
本篇讨论的办法可以实现通用的方法调用外部函数。
演示程序使用了treeView控件做为参数修改控件,实现了参数实时修改生效并且参数保存到磁盘。
程序可以调用任何你自定义的halcon外部函数,仅需要你自己提供一下传入的图标变量(图片)和读取和显示运行结果。
在演示程序的debug目录下,可以找到testhdvp.hdvp,由于它不能直接运行,所以勇哥写了一个main.hdev用来演示调用这个外部函数。
如果运行main.hdev出现调用函数红色的情况,说明函数路径配置有问题。
你需要使用“管理函数”功能把testhdvp.hdvp的路径添加进来。
要注意的是,仅仅是halcon运行外部函数需要这样的设置函数目录的步骤,运行本文的C#端程序则不需要,
因为程序里面有设置外部函数运行路径的代码。
testhdvp.hdvp函数调用参数如下:
示例程序仅仅演示了一下改变Parameter参数,它是一个“rectangle1”参数,以控制图片中二维码那部分的region的过滤范围。
其它两个参数test_parameter、dispLevel没有编写对应效果的代码,只是做为占坑示意。
程序中定义了一个结构体hdvpFunParamStruct,执行外部函数后,输出的图标变量ImageAffinTrans和RegionUnion_result,输出的控制变量result,它们的结果都可以通过这个结构体来访问。
public struct hdvpFunParamStruct { public List<string> inputIconVarName; public List<HObject> inputIconVar; public List<string> outputIconVarName; public List<HObject> outputIconVar; public List<string> inputControlParameterVarName; public List<HTuple> inputControlParameterVar; public List<string> outputControlParameterVarName; public List<HTuple> outputControlParameterVar; } private hdvpFunParamStruct hdvpParameter;
使用者只需要修改一下如下所示的执行外部函数的代码,包括输入的图片和读取执行结果并显示。
最复杂的输入参数都变成了由程序面板上进行修改控制了。
private void button1_Click(object sender, EventArgs e) { var winHandle = hWindowControl1.HalconWindow; HObject img=new HObject(); HTuple width=new HTuple(); HTuple height=new HTuple(); img.Dispose(); width.Dispose(); height.Dispose(); HOperatorSet.ReadImage(out img,"printer_chip/printer_chip_01"); //[470,318], [740,578] try { readHdvpInputControlParemeter(); MyEngine.UnloadAllProcedures(); runHdvp(new List<HObject>() { img }, hdvpParameter.inputControlParameterVar); var s1 = hdvpParameter; HOperatorSet.SetColor(winHandle, "blue"); HOperatorSet.SetDraw(winHandle, "margin"); HOperatorSet.GetImageSize(img, out width, out height); HOperatorSet.SetPart(winHandle, 0, 0, height, width); HOperatorSet.ClearWindow(winHandle); HOperatorSet.DispObj(img, winHandle); foreach (var m in hdvpParameter.outputIconVar) { HOperatorSet.DispRegion(m, winHandle); } MessageBox.Show("执行完毕!"); } catch(Exception ex) { MessageBox.Show(ex.Message); } }
演示程序的动图效果下面的图片:
在控制参数中,做为约定,“:=”前面的内容是注释,你可以任意改为有意义的内容,后面的是值。
要修改注释或者值,你只需要点击节点就可以了。
“新建节点1":=470
另外,如果你修改了halcon端的代码,只需要在halcon端保存。在C#这边不需要重启程序也可以实时生效。
下载资源:
--------------------------------
注意:你可以先下载视频试看,然后再决定是否要购买全部下载资源。
试看视频
视频下载后可以“试播”1分钟,你可以拖动进度条任意观看,以评估是否需要购买。
链接: https://pan.baidu.com/s/17mHCQzMRkV9YXWDkItwX3g
提取码: nunp
下载资源
本资源是收费的,你需要注册本站用户才可以下载,它包括下面内容:
视频的播放密码
视频只能在指定电脑上播放,一机一码。你购买本资源后,勇哥会把播放密码发你。
本文配套C#程序的源代码
源码使用vs2013及以上版本
halcon端的testhdvp.hdvp源码
源码使用的是halcon 19.11版本
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
视频文件编号:halcon中级篇1749

