石鑫华视觉论坛

 找回密码
 注册会员
查看: 1470|回复: 0

[原创] LabVIEW调用Halcon算子的元组HTuple参数输入输出库

[复制链接]
  • TA的每日心情

    5 小时前
  • 签到天数: 3384 天

    连续签到: 6 天

    [LV.Master]2000FPS

     楼主| 发表于 2023-4-26 12:20:41 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    在LabVIEW调用Halcon的.NET调用方法中,很多算子的参数原型是只有HTuple元组类型的。而元组数据类型,在LabVIEW中是没有的。所以,只能使用相应对应的转换函数,将各种数据类型转换为元组HTuple,或者是将元组HTuple转换为各种数据类型。
    QQ截图20230426110010.png
    输入参数是元组类型的算子,必须将多种不同类型的参数转换为元组HTuple
    QQ截图20230426110058.png
    输出参数是元组HTule,也需要转换为LabVIEW中可使用的数据类型
    所以,这里为了方便,设计了一个至元组的多态VI,将LabVIEW中各种数据类型转换为元组HTuple,主要用于输入参数的处理;以及一个元组至的多态VI,将元组HTuple转换为LabVIEW中各种数据类型,主要用于输出参数的处理。
    QQ截图20230426113810.png
    LabVIEW转HTuple元组的构造器中,可用的算子有上面这些,这里都是可以创建成相应的子vi,然后将相应的LabVIEW数据转换为HTuple类。当然,最上面的HTuple仅仅只是一个打开HTuple构造器,并没有相应的数据类型转换,如果还要进行一些操作,则需要在后面再调用方法。这里在LabVIEW中,比较常用的,大概也就是布尔、单精度浮点、双精度浮点、整形I32、整形I64、字符串以及其对应的数组类型。
    单个转换函数的实现如下图:
    QQ截图20230426114302.png
    布尔至元组函数的实现
    这里只需要选择好相应的转换函数,例如布尔至元组,则选择HTuple(Bloolean b)这个算子即可。然后定义好相应的接线端、图标。这里需要注意一下,转换元组一般都不会出错,但是仍然要设置错误连接,因为有时候是必须要有错误来强制顺序的。例如在一个循环执行的算子中,如果要输入或输出参数时,不释放关闭HTuple引用,则会引起内存溢出的,则必须要在调用HTuple元组算子后,添加Dispose和Close来释放关闭元组的引用。其它的转换函数也可参照上面的方法。
    QQ截图20230426114726.png
    将所有的转换到元组的函数打包成一个多态VI“至元组.vi”,这样就可以在需要的地方调用至元组.vi,然后可自动匹配数据类型,就不需要再去创建相应的转HTuple类型的算子,也可以节省LabVIEW框图的空间,让LabVIEW程序框图更简洁。
    而元组至LabVIEW的数据类型,则相对要少一些,主要是一些将HTuple转换为LabVIEW各种数组的算子:
    QQ截图20230426115114.png
    返回的HTuple类型可使用的HTuple算子要多很多,有很多计算类型的,例如正弦、余弦之类的三角函数。这些函数一般就不太需要转换了,这里只需要得到LabVIEW可接受的数据类型即可,其它的计算,一般使用LabVIEW中的函数来实现。所以,这里只要实现几个Toxx()的算子即可:
    QQ截图20230426115653.png
    元组至双精度数组函数的实现
    QQ截图20230426115742.png
    元组至多态VI
    QQ截图20230426115818.png
    元组.llb
    这里在llb中,加了一个释放关闭元组的函数:
    QQ截图20230426115956.png
    释放关闭元组.vi实现方法
    在有调用HTuple的地方,都是要在处理了HTuple后,将其释放关闭的,所以这里弄了一个小vi,也是为了方便处理HTuple,能让程序框图更简洁。当然,这个释放关闭功能,是不能直接放在上面的xx至元组或元组至xx函数中的,因为那样可能会在HTuple的数据还没有传递给后面的算子或返回的数据还没有处理就被清除释放了。所以,通常是要在中间的处理算子后,再使用错误连线强制串行后,才释放关闭:
    QQ截图20230426121341.png
    元组至.vi和至元组.vi以及释放关闭元组.vi的典型用法。
    典型用法:先调用至元组.vi,将需要的输入参数转换为HTuple类,然后传递给Halcon处理算子,处理算子处理后,利用错误连线,调用释放关闭元组.vi,强制释放关闭元组至的HTuple类。然后去执行获取类的Halcon算子,得到HTuple类后调用元组至.vi,将HTuple转换为LabVIEW中的可用数据,使用错误连线调用释放关闭元组.vi清除内存。
    附件版本:LabVIEW2020SP1 32位+Halcon19.11 32位
    元组.llb (708.83 KB, 下载次数: 1, 售价: 10 元)
    增加一些元组至DBL、至SGL、至I32、至I64、至IntPtr、至Obj等单一元素的转换,不需要再在调用程序中使用索引数组元素函数。同时增加一些元组至xx(DC)的函数,这里函数在元组转换为相关的函数后,紧接着调用了释放关闭(Dispose Close),从而在调用程序中,不再需要释放关闭。
    将llb库修改为lvlib库,更方便修改。同时,元组至xx数组、元组至xx数组(DC)、元组至xx、元组至xx(DC)等函数的错误和元组引用的接线端位置修改了一下位置,更方便连接在执行函数后,使用错误连线来强制顺序结构。
    元组.zip (468.7 KB, 下载次数: 0, 售价: 15 元)

    元组.lvlib

    元组.lvlib




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-22 13:15

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表