C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!)

2024-06-04 3145阅读

编程环境:VS2019 +HALCON 20.11

C#联合HALCON的编程方式大致分为三种,个人经验,如有其他方法,欢迎留言讨论哦~

①:HALCON导出语言方式

HDevelop内导出类index.php/tags-522.html" class="superseo">文件后,C#执行所导出的类文件(个人觉得比较难用,维护调整极为不便)。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第1张

②采用高级语言式编程

对于编程能力要求较高,且对于运行流程无可视化,前期调试比较复杂。适合实现代码量较少的功能。

例如:

            HOperatorSet.ReadImage(out HObject Image_Read, "D:\SaveImages\TEST.JPEG");
            HOperatorSet.Threshold(Image_Read, out HObject Thres_Region, 100, 255);
            HOperatorSet.AreaCenter(Thres_Region, out HTuple AREA, out HTuple row, out HTuple col);

③采用调用HALCON引擎功能,本次说明方法!

个人觉得这是最方便的联合编程方式,可全程在HDevelop内部进行halcon程序编写,之后导出为库工程,C#内进行调用即可

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第2张

C#内调用HALCON引擎流程

HDevelop内:

1、确认输入输出变量并编写HALCON程序

*输入
read_image(Image, 'printer_chip/printer_chip_01')
Threshold_Min :=120
Threshold_Max :=255
*输出
OBJ_Area :=0
OBJ_Row :=0
OBJ_Col :=0
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, OBJ_Region, Threshold_Min, Threshold_Max)
area_center(OBJ_Region, OBJ_Area, OBJ_Row, OBJ_Col)

2、对HALCON程序进行封装成本地新函数

2.1、选中需要封装函数的代码,右键进入函数创建界面

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第3张

2.2设置封装函数的参数

        一般设置:对封装函数进行命名,可以选择是否需要对函数设置密码:设置密码后,HDevelop内查看该函数需要输入密码,导出后,该函数为加密状态,其他软件打开导出文件为乱码(不会影响到C#内部的解析执行)

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第4张

参数: 选择输入输出。

例如我们这里的输入:输入图标参数是“Image”,输出是“GrayImage”和“OBJ_Region”。其中输出“GrayImage”是没有作用的,或许说对于后面的是不需要的,选择该变量,右侧移除

输入控制参数是“Threshold_Min”“Threshold_Max”,输出为是“OBJ_Area”“OBJ_Row”“OBJ_Col”

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第5张

2.3通常,后面的“一般文档”和“文档参数”无需设置,特殊情况再做说明。

完成后点击确定,前面替代选中的程序行打勾

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第6张

确定后,HDevelop文件也有了相应的变化

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第7张

3、导出到外部库工程

3.1导出库工程

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第8张

3.2出库工程设置,如下设置(C#为默认设置)。注意命名空间,不要和C#内的命名空间冲突了。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第9张

3.3导出库工程文件到工程位置文件夹,导出结果如下:

在工程文件夹下级目录得到两个文件夹(有用)+一个TXT文档(没用)。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第10张

至此,HDevelop内部所有工作已经结束,接下来是C#内部如何调用的问题。

C#内

1、导入HDevelop生成的库文件

C#工程内配置好HALCOON环境,其实就添加halcondonet.dll、hdevenginedotnet.dll进来就可以了。

(1)把这个文件导入到C#工程内。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第11张C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第12张

(2)将HALCON文件放置到C#生成文件根目录下,默认是需要和执行文件同目录的,不然会报错。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第13张

2、定义输入输出

格式整体和HDevelop内部是一样的

      private void btn_Execute_Click(object sender, EventArgs e)
        {
            HOperatorSet.ReadImage(out ImageRead, "D:/TESE_1.bmp");
            hSmartWindowControl1.HalconWindow.DispObj(ImageRead);
            HTuple Threshold_Min = 120; HTuple Threshold_Max = 255;
            HalconEngine_Namespeace.HalconEngine_Test.Threshold_20240206(ImageRead, out HObject OBJ_Region,  Threshold_Min,  Threshold_Max, out HTuple OBJ_Area, out HTuple OBJ_Row, out HTuple OBJ_Col);
            textBox_Result.Text = OBJ_Area + "\r\n" + OBJ_Row + "\r\n" + OBJ_Col + "\r\n";
        }

3、执行HALCON引擎,获得执行结果

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第14张

结果和HDevelop内计算的结果一样

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第15张

如果要在窗口内显示二值化后的区域,只需添加相应的代码即可!

   private void btn_Execute_Click(object sender, EventArgs e)
        {
            HOperatorSet.ReadImage(out ImageRead, "D:/TESE_1.bmp");
            hSmartWindowControl1.HalconWindow.DispObj(ImageRead);
            HTuple Threshold_Min = 120; HTuple Threshold_Max = 255;
            HalconEngine_Namespeace.HalconEngine_Test.Threshold_20240206(ImageRead, out HObject OBJ_Region,  Threshold_Min,  Threshold_Max, out HTuple OBJ_Area, out HTuple OBJ_Row, out HTuple OBJ_Col);
            textBox_Result.Text = OBJ_Area + "\r\n" + OBJ_Row + "\r\n" + OBJ_Col + "\r\n";
            hSmartWindowControl1.HalconWindow.SetColor("red"); //设置显示颜色
            hSmartWindowControl1.HalconWindow.SetDraw("fill"); //设置显示方式
            hSmartWindowControl1.HalconWindow.DispObj(OBJ_Region);
        }

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第16张

注意事项,重要!!

如果一个C#工程里面需要调用两个及以上的HALCON引擎,需要对引擎文件的路径指定,不然多个引擎同时调用是,引擎路径会继承最近一次调用的引擎路径。导致程序报错:找不到相应的引擎文件。

解决办法:HALCON引擎内修改路径至指定路径!

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第17张

将文件路径指定

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第18张

我是指定到和执行文件同目录,这样就解决了多个HALCON引擎同时调用时,报错的问题。

C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!) 第19张

示例下载连接

https://download.csdn.net/download/mooney1997/88816863?spm=1001.2014.3001.5503

如有不足,欢迎大家留言讨论~~~


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]