<Halcon>自定义函数封装方法


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

1、名词解释

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

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

在这里插入图片描述
在这里插入图片描述
通常,Halcon代码程序窗口中,算子和小函数的代码颜色是有差异的。如下图:
在这里插入图片描述

2、例子介绍

1、处理原图与任务:

要求求亮区外圆半径大小。
在这里插入图片描述

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.显示阶段:对结果进行显示
如下图:
在这里插入图片描述
明确1:我们需要将第二部分“处理阶段的算子封装成一个函数”

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

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

选中处理阶段函数,右键,点击“创建新函数”。如下图所示:
在这里插入图片描述
之后显示页面如下:
在这里插入图片描述
首先点击一般设置栏,编辑函数名称(你想把这个函数名叫什么就命什么名),再点击“参数”。
之后显示页面如下:
在这里插入图片描述
图标参数含义:即图片、区域、Xld轮廓等图形变量。
变量参数含义:指我们在程序中用得到的整形、浮点型、字符串、数组等变量

我们可以点击添加变量按钮进行输入输出变量的添加操作
如果我们要进行删除变量操作,操作方式如下图:
首先选中变量,点击移除
在这里插入图片描述
点击移除后:
在这里插入图片描述
也可以通过选中函数后点击“上移”、“下移”更改变量顺序。

我们由需求分析步骤可知,我们需要:
传入一个图像变量,传出外接圆的坐标(X,Y)与外接圆的半径
修改参数页面变量如下,并点击一般文档切换栏目:
在这里插入图片描述
一般文档栏目:(可以对函数进行说明性文档的编写)包括了函数的描述、实例程序、参数说明、高级注意事项4个部分。我们一般不进行填写。
在这里插入图片描述
点击上图中的参数文档:
参数文档包含了这个函数的详细的参数意义说明:如下图:
在这里插入图片描述
我们如果将一般文档和参数文档都填完整那么会出现什么情况呢?
你的函数有了一份像halcon算子一样的说明文档:
即选中一个算子,点击F1出现的算子帮助文档!
在这里插入图片描述
在这里插入图片描述
完成上述所有步骤点击确定按钮即可生成函数
在这里插入图片描述
在这里插入图片描述

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

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

如果想查看函数代码,选中函数,点击鼠标右键,选择显示函数即可查看代码:
在这里插入图片描述
可以点击红色方框内的后退按钮退出当前函数显示
如下图:
点击蓝色方框内的 按钮,打开函数编辑窗口(即上边我们进行函数名修改、接口参数变化的窗口)
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请将下面的halcon代码转写为python代码:<?xml version="1.0" encoding="UTF-8"?> <hdevelop file_version="1.2" halcon_version="20.11.0.0"> <procedure name="main"> <interface/> <body> <c as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[1,1]" as_ord="1">* Image Acquisition 01: Code generated by Image Acquisition 01</c> <l as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[1,2]" as_ord="1">list_files ('G:/Grasp-Dataset/brick-text', ['files','follow_links'], ImageFiles)</l> <l as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[1,3]" as_ord="1">tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)</l> <l as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[2,2]" as_ord="1">for Index := 0 to |ImageFiles| - 1 by 1</l> <l as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[2,3]" as_ord="1"> read_image (Image, ImageFiles[Index])</l> <c as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[2,4]" as_ord="1"> * Image Acquisition 01: Do something</c> <l> ImgPath:=ImageFiles[Index]</l> <c> * 分割文件名</c> <l> parse_filename(ImageFiles[Index], BaseName, Extension, Directory)</l> <l> minvalue:=20</l> <l> maxvalue:=60</l> <l> Amp:=minvalue+rand(1)*(maxvalue-minvalue)</l> <l> add_noise_white (Image, ImageNoise, Amp)</l> <l> write_image (ImageNoise, 'jpeg', 0, Directory+BaseName+'noise')</l> <c> </c> <l as_id="image_acquisition" as_name="Image Acquisition 01" as_grp="[3,1]" as_ord="1">endfor</l> </body> <docu id="main"> <parameters/> </docu> </procedure> </hdevelop>
07-12

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值