勇哥的视频教程(halcon中级篇):C#端用treeview控件编辑hdvp参数值实时调用外部函数


这一篇谈下C#调用hdvp外部函数要用到的动态修改传入参数的方法。

C#调用外部函数时,由于函数参数各异,你得对每个不同的函数编制调用程序,因此C#端代码量很大。

本篇讨论的办法可以实现通用的方法调用外部函数。


演示程序使用了treeView控件做为参数修改控件,实现了参数实时修改生效并且参数保存到磁盘。

程序可以调用任何你自定义的halcon外部函数,仅需要你自己提供一下传入的图标变量(图片)和读取和显示运行结果。


在演示程序的debug目录下,可以找到testhdvp.hdvp,由于它不能直接运行,所以勇哥写了一个main.hdev用来演示调用这个外部函数。

如果运行main.hdev出现调用函数红色的情况,说明函数路径配置有问题。

image.png

你需要使用“管理函数”功能把testhdvp.hdvp的路径添加进来。

image.png

要注意的是,仅仅是halcon运行外部函数需要这样的设置函数目录的步骤,运行本文的C#端程序则不需要,

因为程序里面有设置外部函数运行路径的代码。


testhdvp.hdvp函数调用参数如下:

image.png

示例程序仅仅演示了一下改变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#这边不需要重启程序也可以实时生效。


treeview参数化调用hdvp演示动图_转.gif




下载资源:

--------------------------------

注意:你可以先下载视频试看,然后再决定是否要购买全部下载资源。


试看视频

视频下载后可以“试播”1分钟,你可以拖动进度条任意观看,以评估是否需要购买。

链接: https://pan.baidu.com/s/17mHCQzMRkV9YXWDkItwX3g 

提取码: nunp


下载资源

本资源是收费的,你需要注册本站用户才可以下载,它包括下面内容:

  • 视频的播放密码

    视频只能在指定电脑上播放,一机一码。你购买本资源后,勇哥会把播放密码发你。

  • 本文配套C#程序的源代码

    源码使用vs2013及以上版本

  • halcon端的testhdvp.hdvp源码

    源码使用的是halcon 19.11版本


付费资源

您需要注册登录后通过购买才能查看




--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!

视频文件编号:halcon中级篇1749



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864