HALCON&VS C# 混合编程案例【01】: 3D 算法处理在 Visual Studio 2019 C# 环境中的集成实例

前言:

HALCON 为一款比较流行的商业视觉处理软件,他提供了多种开发的模式,可以在HALCON中开发,也可以将HALCON的设计通过导出库的形式集成到其他开发环境里面,以方便系统集成。本文为笔者自己的一个3D 视觉检测项目,利用HALCON的3D 库开发算法,然后,将算法集成到 MS-VS-C#的环境中:


集成环境:

Windows10,64位系统:

Microsoft Visual Studio Community 2019 版本 16.11.22

HALCON 18.1 Progress (x64-win64 avx2)


步骤1: 在HALCON中构建你的3D的应用:

【案,也就是你在HALCON中的算法,

笔者在HALCON中构建了一个机器人的3D抓取项目,anyway,大致的算法在HALCON中已经基本完成了,下面的图例,显示了从扫描的点云中通过分割算法等拿到了一个球体】


步骤2 : 将HALCON的设计导出到C#的格式

2.1 HALCON算法的导出: 

 在HALCON中,选择导出:

然后,我们导出到一个cs(C sharp)文件备用:

2.2 HALCON输出文件预览和解读:

【Franklin案,这里是比较重要的介绍】

在HALCON依据C#输出的文件里面,有一些标准的文件格式,这些未来是我们移植要用到的,这里逐一说明:

2.2.1 命名空间的申明

这个肯定是需要的:

//
// File generated by HDevelop for HALCON/.NET (C#) Version 18.11.0.1
// Non-ASCII strings in this file are encoded in local-8-bit encoding (cp936).
// 
// Please note that non-ASCII characters in string constants are exported
// as octal codes in order to guarantee that the strings are correctly
// created on all systems, independent on any compiler settings.
// 
// Source files with different encoding should not be mixed in one project.
//

using HalconDotNet;

 2.2.2 Public 类申明:

首先是整个HALCON的输出类(根类),后面各种调用都要用到这个输出大类: 

public partial class HDevelopExport

然后,在输出根类下,有一组我的算法调用的公共类【这个依据你算法的设计不同而不同】 

我的算法里面,包括3D处理的接口函数,这里,被HALCON的移植程序转为输出根类的一个方法: 

  2.2.3 算法过程的封装私类action:

【案】算法的过程和设计都被封装在action里面了,然后,其中核心的算法处理,被放到了 action的try的结构里面。这部分,我们要依据我们在现在新系统的功能去重新组织一下,因为,现在移植到C#里面是,面向对象【控件】的处理,所以,之前在 HALCON里面的处理过程,尤其是过程处理的逻辑需要重新进行设计。

try的部分,笔者的算法核心部分:

 


步骤3 ,在VS-C#中,引入HALCON的支持动态库:【VS C#是通过工具箱的形式】 

先通过菜单选取工具箱:

然后,我们在工具箱里面构建HALCON工具: 在工具箱的空白地方,右键选择,新建选项卡:

然后添加如下,HALCON工具,

 

 然后,右键【选择项】添加动态库:

 

右边浏览,选择HALCON的动态库地址:

 【案,注意动态库,在你的HALCON的安装目录下】

笔者的安装地址如下,你需要检查一下你的地址: 

 D:\Program Files\MVTec\HALCON-18.11-Progress\bin\dotnet35

 然后,安装dll如下:

“”

这时候,HALCON的工具箱应该有如下的动态库:


步骤4,在VS中构建一个展示HALCON的窗体:

4.1 构建一个新的HALCON的窗体:

这个具体的创建步骤,可以参考我的上一个博客:

在VS中,通过菜单插入一个新的窗体

在VS菜单中,选择:

新建一个窗体: 

4.2 在原有项目的菜单上,连接到这个窗体

我们在原有的项目的主菜单上,设计一个点击连接打开这个窗体: 

 双击,在click动作里面输入以下代码,打开新的窗口:


        private void 打开检测窗口ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Create a new form
            frm3Ddetect frm_3Ddetect = new frm3Ddetect();


            // Show the new form
            frm_3Ddetect.Show();


        }

4.3 把HALCON的窗口控制拖动到刚才建立的C#窗口:

4.4 设计一个按钮执行HALCON的算法:

 4.5 把2.2.3介绍的ACTION添加到:


步骤5 算法移植:

5.1 添加一下新的C#源文件放置公共类:

 添加一下C#的文件:

5.2 把HALCON生成的文件内容COPY到这个文件里面:

 

 然后,我们可以看到清晰的类的组织【笔者用到的一些接口函数都在里面】:

注意,下面这些设计给MAIN函数的代码,由于我们是植入现有的工程,是不需要的,注释掉: 

 5.3 给click里面的action的类补上命名控件的定义:

5.4 在click动作里面构建一个类的实例

【案】现在我们要用到HALCON改成Public里面申明的公共类的方法,所以,先要在点击鼠标后,立刻构建一个类的实例:


        private void button1_Click(object sender, EventArgs e)
        {


            HDevelopExport HDevelopObj = new HDevelopExport();

 然后,把之前无法识别的方法都加上类的引用:如果,不加类的引用,一些HALCON的接口函数调用会报错如下:

 如果,用了类的应用,就可以解决这个问题了:


6 生成并运行代码结果如下:

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franklin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值