0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解halcon函数的封装方法

QQ475400555 来源:机器视觉沙龙 2023-07-10 10:49 次阅读

有网友说不太清楚这个halcon函数的封装方法。今天写个教程帖子,大家一起进步分享。

1、名词解释

算子:
指Halcon中最基础、最底层的函数(即你看不到它的代码实现),一个算子只有一句话,例如threshold算子。

函数:
由多个算子组合成的函数。其特点是,可以通过鼠标右键单击“显示函数”打开。如下图:

39eb45d4-1ecb-11ee-962d-dac502259ad0.png

39fc3b00-1ecb-11ee-962d-dac502259ad0.png

通常,Halcon代码程序窗口中,算子和小函数的代码颜色是有差异的。如下图:

3a17af16-1ecb-11ee-962d-dac502259ad0.png

2、例子介绍

1、处理原图与任务:

要求求亮区外圆半径大小。

3a362c84-1ecb-11ee-962d-dac502259ad0.png

2、代码与解析:

* 读入图片
read_image (Image, ‘C:/Users/Administrator/Desktop/1.jpg’)

  • 根据图片打开窗口
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

  • 显示图片,用于预览
    dev_display (Image)

  • 二值化
    binary_threshold (Image, Region, ‘max_separability’, ‘light’, UsedThreshold)

  • 分割连通域
    connection (Region, ConnectedRegions)

  • 使用特征筛选去掉小面积区域的干扰
    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 5000, 1000000000)

  • 合并区域,为下一步求取最小外接矩形做准备
    union1 (SelectedRegions, RegionUnion)

  • 求取最小外接矩形
    smallest_circle (RegionUnion, Row, Column, Radius)

  • 生成一个圆形,用于显示
    gen_circle (Circle, Row, Column, Radius)

*显示结果前的准备
dev_clear_window ()
dev_set_draw (‘margin’)
dev_set_line_width (3)
dev_set_color (‘red’)

  • 显示相关结果
    dev_display (Image)
    dev_display (Circle)
    disp_message (WindowHandle, ‘圆环半径: ‘+Radius, ‘window’, 50, 50, ‘black’, ‘true’)

3、Halcon函数封装方式

Halcon的函数创建分为以下几个步骤:
1、明确需求,要封装的函数要实现什么功能
2、选取函数部分进行函数创建,更改函数接口,即更改输入输出变量
3、运行验证与函数更改操作

①明确需求

我们拿上边的这个程序举例,我们这个程序完成的任务主要是:求取外接圆的半径并且显示

我们看代码一共分为三个部分:
1.准备阶段:读入图片、打开窗口、预览等工作。
2.处理阶段:进行图像处理,求取结果
3.显示阶段:对结果进行显示
如下图:

3a606dc8-1ecb-11ee-962d-dac502259ad0.png

明确1:我们需要将第二部分“处理阶段的算子封装成一个函数”

此时我们再看处理阶段的代码,我们由分析可知:
1、此段代码需要一个图片,用于图像处理
2、需要得出圆环外接圆这个结果(外接圆的位置与半径)
由此确定:
传入一个图像变量,传出外接圆的坐标(X,Y)与外接圆的半径
到此需求已经明确。

②选取函数部分进行函数创建,更改函数接口

选中处理阶段函数,右键,点击“创建新函数”。如下图所示:

3a99ebde-1ecb-11ee-962d-dac502259ad0.png

之后显示页面如下:

3ac1ca46-1ecb-11ee-962d-dac502259ad0.png


首先点击一般设置栏,编辑函数名称(你想把这个函数名叫什么就命什么名),再点击“参数”。
之后显示页面如下:

3ae4a002-1ecb-11ee-962d-dac502259ad0.png

图标参数含义:即图片、区域、Xld轮廓等图形变量。
变量参数含义:指我们在程序中用得到的整形、浮点型、字符串、数组等变量

我们可以点击添加变量按钮进行输入输出变量的添加操作
如果我们要进行删除变量操作,操作方式如下图:
首先选中变量,点击移除

3b0b625a-1ecb-11ee-962d-dac502259ad0.png

点击移除后:

3b314c5e-1ecb-11ee-962d-dac502259ad0.png

也可以通过选中函数后点击“上移”、“下移”更改变量顺序。

我们由需求分析步骤可知,我们需要:
传入一个图像变量,传出外接圆的坐标(X,Y)与外接圆的半径
修改参数页面变量如下,并点击一般文档切换栏目:

3b47fb8e-1ecb-11ee-962d-dac502259ad0.png

一般文档栏目:(可以对函数进行说明性文档的编写)包括了函数的描述、实例程序、参数说明、高级注意事项4个部分。我们一般不进行填写。

3b614940-1ecb-11ee-962d-dac502259ad0.png

点击上图中的参数文档:
参数文档包含了这个函数的详细的参数意义说明:如下图:

3b817490-1ecb-11ee-962d-dac502259ad0.png

我们如果将一般文档和参数文档都填完整那么会出现什么情况呢?
你的函数有了一份像halcon算子一样的说明文档:
即选中一个算子,点击F1出现的算子帮助文档!

3ba5ee24-1ecb-11ee-962d-dac502259ad0.png

3bde421a-1ecb-11ee-962d-dac502259ad0.png

完成上述所有步骤点击确定按钮即可生成函数

3c0b5e12-1ecb-11ee-962d-dac502259ad0.png

3c29ffca-1ecb-11ee-962d-dac502259ad0.png

③运行验证与函数更改操作

点击F5运行程序或者点击F6单步运行程序验证程序的准确性。
当F6单步调试到函数时可以点击F7运行到函数内部执行。点击F8跳出函数执行

如果想查看函数代码,选中函数,点击鼠标右键,选择显示函数即可查看代码:

3c489bc4-1ecb-11ee-962d-dac502259ad0.png

可以点击红色方框内的后退按钮退出当前函数显示
如下图:
点击蓝色方框内的 按钮,打开函数编辑窗口(即上边我们进行函数名修改、接口参数变化的窗口)

3c74c046-1ecb-11ee-962d-dac502259ad0.png


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • HALCON
    +关注

    关注

    16

    文章

    63

    浏览量

    27003

原文标题:详解Halcon自定义函数封装方法(全网最详细)

文章出处:【微信号:机器视觉沙龙,微信公众号:机器视觉沙龙】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview调用halcon方法

    labview调用halcon方法
    发表于 03-12 14:40

    Labview里面使用Halcon函数方法一:直接调用Halcon函数

    。还有一种就是 需要哪个Halcon函数,就使用调用节点方式解决。××××××××××××下面阐述用调用节点属性节点等方式运行Halcon。硬件组态:一个普通PC。软件组态: Win7 64位中文
    发表于 08-15 14:14

    Labview里面使用Halcon函数。 方式为:直接。运行后缀为hdev 的Halcon程序

    Labview里面使用Halcon函数。 方式为:直接。运行后缀为hdev 的Halcon程序Halcon是由MVTec这个公司开发的。这家公司对自己有非常清晰的定位,他们就是图像处
    发表于 08-15 16:38

    关于labview调用halcon程序的方法介绍

    `Labview调用Halcon有两种方法,一种是调用通过halcondotnet.dll调用Halcon函数,另一种是通过hdevenginedotnet.dll调用已经写好的
    发表于 10-11 11:54

    labview通过.NET调用Halcon函数示例

    labview 与halcon混合编程,目前有两种方式1、.NET函数调用,接下来要介绍的方法2、.NET Engine调用方法,前面有发帖介绍过该方式,参考https
    发表于 05-07 15:01

    Labview 调用C#封装halcon

    Labview 调用C#封装halcon库,内存释放能做到最好
    发表于 08-30 15:37

    labview怎么调用halcon的库函数

    labview怎么调用halcon的库函数?比如调用dev_update_off函数。试过,会报这个错:
    发表于 11-29 23:12

    PICC库函数详解

    PICC库函数详解
    发表于 04-18 20:13 132次下载

    Halcon9.0编程技术详解

    Halcon9.0编程技术详解Halcon9.0编程技术详解
    发表于 12-22 15:20 0次下载

    基于HALCON的PCB光学定位点的3种识别方法及比较

    基于HALCON的PCB光学定位点的3种识别方法及比较基于HALCON的PCB光学定位点的3种识别方法及比较
    发表于 12-22 15:20 11次下载

    Halcon机器视觉函数资料_附录A按内容排序对应函数速查表

    Halcon机器视觉函数资料_附录A 按内容排序对应函数速查表
    发表于 03-03 15:07 60次下载

    全网最详细解析Halcon自定义函数封装方法

    有网友说不太清楚这个halcon函数封装方法。今天写个教程帖子,大家一起进步分享。 1、名词解释 算子: 指Halcon中最基础、最底层的
    的头像 发表于 04-22 11:01 4417次阅读
    全网最详细解析<b class='flag-5'>Halcon</b>自定义<b class='flag-5'>函数</b><b class='flag-5'>封装</b><b class='flag-5'>方法</b>

    关于如何将函数封装成库使用的方法介绍

    关于如何将函数封装成库使用的方法介绍
    发表于 10-28 12:00 1次下载
    关于如何将<b class='flag-5'>函数</b><b class='flag-5'>封装</b>成库使用的<b class='flag-5'>方法</b>介绍

    labview联合halcon的编程方法

    经过全网学习,终于入门了labview联合halcon的编程方法,希望能帮到大家
    发表于 05-23 15:22 17次下载

    详解Halcon自定义函数封装方法

    有网友说不太清楚这个halcon函数封装方法。今天写个教程帖子,大家一起进步分享。
    的头像 发表于 07-10 10:45 1831次阅读
    <b class='flag-5'>详解</b><b class='flag-5'>Halcon</b>自定义<b class='flag-5'>函数</b><b class='flag-5'>封装</b><b class='flag-5'>方法</b>