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

编程环境: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 :=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、选中需要封装函数的代码,右键进入函数创建界面

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

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

  • 27
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值