LabVIEWwilliam hill官网
直播中

周建远

8年用户 1462经验值
擅长:制造/封装 连接器 光电显示
私信 关注

LabVIEW调用Halcon程序的操作步骤

` 本帖最后由 zhouyezuishuai 于 2021-7-30 11:35 编辑

      如题,之前就遇到过这个问题,本来也是直接用NI VISION做视觉的,后来发现操作没那么简单,偶然的一个机会开始接触Haclcon,发现这软件做视觉真的是方便,后来就想着怎么跟labview做联动,调用其中的程序,在william hill官网 找到了几个例子,但是对基础户稍微差点的朋友不是很好理解,所以这里贴一下我这里的过程。 此处以一个案例来讲解,找到图中黑色圆形区域的半径  图1是原图,图2是Halcon中计算到的圆形区域,程序很简单,就是先读取图片,然后阈值分割找出黑色区域,再根据面积取得黑色圆形区域,然后计算最小外接圆,半径就出来了  下面开始讲解Labview中如何调用Halcon中的程序来取得计算结果
    Labview的VI截图如下,除了红圈内为属性节点,其他全部为调用节点, 构造器函数选择的dll文件路径在Halcon安装目录下,我电脑上路径为  C:Program FilesMVTecHALCON-18.05-Progressindotnet35hdevenginedotnet.dll, 然后按照该VI中的连线方式连线即可成功取得Halcon中的执行结果
   接下来讲一下VI中的一些东西的意义,在本VI中,由于Haclcon中输出的控制变量结果为3个(圆的中心点X,Y坐标和半径大小),如果我们这里只取半径的话,其实程序框图中的FOR循环可以去掉,直接在Index输入3就可以只取半径,切记这里的Index顺序就是Halcon中控制变量的顺序,从1开始而非Labview中从0开始的下标。
  在程序的最后一定要执行Dispose这个函数,否则该VI运行过程中的占用内存会持续累加,直到内存溢出  我最开始就没有执行这个,结果程序跑半个小时就内存溢出,然后尝试了各种方案,比如Halcon中执行完毕清除所有,但还是不行,最终还是发现在labview中执行Dispose这个函数才可以
  还有一点,就是程序框图后面的GetCtrVarTuple的引用端一定要连的事Execute之后的引用,否则会报错
  这种方式的优点就是可以利用Halcon在视觉处理方面的优势快速有效的实现结果,缺点就是目前我还没找到如何从Labview中输入参数给Halcon,所以这边调用的比较麻烦,labview中必须每次都把图片保存到相同的位置以供Halcon执行,两者之间的交互属于单向的,对某些情况下不太好处理,有知道怎么从Labview中传参数给Halcon的朋友还请指导一下,在下感激不尽!
PS: 原图,Halcon程序,LabVIEW程序都在附件的文件夹中,执行时需要更改Halcon程序中的路径,本人电脑装的Halcon18.05 和Labview2018

` Halcon程序截图 test.bmp
Halcon与Labview联动开发.zip (1.12 MB)
(下载次数: 317, 2021-7-30 11:22 上传)
labview中程序框图

回帖(7)

2021-8-17 16:14:26
刚开始学习,例子非常有用,感谢楼主的付出!
举报

甲方明

2021-12-17 13:19:55
赞一个 非常好 学习一下
举报

wangmeng333

2022-6-7 21:35:07
我是用在c#中把halcon的程序写成一个dll然后再调用dll的,这样可以随便设计参数
举报

tenglonghui369

2022-6-8 23:29:31
多谢楼主分享这些不错的学习资料,应该好好学习天天向上。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分