这一篇谈下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


少有人走的路


















