当前位置: 代码网 > it编程>编程语言>Asp.net > C# 联合HALCON编程 之 HALCON引擎在C#内的调用(入门级!!!)

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

2024年08月01日 Asp.net 我要评论
其中输出“GrayImage”是没有作用的,或许说对于后面的是不需要的,选择该变量,右侧移除。对封装函数进行命名,可以选择是否需要对函数设置密码:设置密码后,HDevelop内查看该函数需要输入密码,导出后,该函数为加密状态,其他软件打开导出文件为乱码(不会影响到C#内部的解析执行)如果一个C#工程里面需要调用两个及以上的HALCON引擎,需要对引擎文件的路径指定,不然多个引擎同时调用是,引擎路径会继承最近一次调用的引擎路径。2.3通常,后面的“一般文档”和“文档参数”无需设置,特殊情况再做说明。

编程环境: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引擎同时调用时,报错的问题。

示例下载连接

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com