当前位置:首页 » 《休闲阅读》 » 正文

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

21 人参与  2024年09月07日 11:27  分类 : 《休闲阅读》  评论

点击全文阅读


编程环境:VS2019 +HALCON 20.11

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

①:HALCON导出语言方式

HDevelop内导出类文件后,C#执行所导出的类文件(个人觉得比较难用,维护调整极为不便)。

②采用高级语言式编程

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

例如:

            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引擎流程

HDevelop内:

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

*输入read_image(Image, 'printer_chip/printer_chip_01')Threshold_Min :=120Threshold_Max :=255*输出OBJ_Area :=0OBJ_Row :=0OBJ_Col :=0rgb1_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、选中需要封装函数的代码,右键进入函数创建界面

2.2设置封装函数的参数

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

参数: 选择输入输出。

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

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

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

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

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

3、导出到外部库工程

3.1导出库工程

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

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

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

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

C#内

1、导入HDevelop生成的库文件

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

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

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

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引擎,获得执行结果

结果和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";            hSmartWindowControl1.HalconWindow.SetColor("red"); //设置显示颜色            hSmartWindowControl1.HalconWindow.SetDraw("fill"); //设置显示方式            hSmartWindowControl1.HalconWindow.DispObj(OBJ_Region);        }

注意事项,重要!!

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

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

将文件路径指定

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

示例下载连接

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

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/156586.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

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

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1