Halcon 基础语法
Halcon 基础语法
教学目标
理解 Halcon 的基本数据类型及其应用场景。
掌握 Halcon 变量定义、运算符及控制语句的语法规则。
能够编写简单的 Halcon 脚本完成图像处理任务。
教学重点与难点
- 重点:数据类型(Image/Region/XLD)、控制语句、函数调用。
- 难点:动态类型机制、集合操作符、函数参数传递规则。
教学课时
- 总时长:4 课时(每课时 45 分钟)
- 分配:
- 第1-2课时:数据类型与变量操作
- 第3课时:控制语句与运算符
- 第4课时:函数与过程调用
教学准备
- 软件环境:安装 Halcon 21.05+ 和 HDevelop。
- 示例图片:提供工业零件图(如齿轮、电路板)。
- 代码示例:准备基础语法演示脚本。
教学内容与步骤
第1-2课时:数据类型与变量操作
1.1 Halcon 核心数据类型
图像(Image)
- 单通道(灰度图)与多通道(彩色图)。
- 示例代码:
1
2
3read_image(Image, 'part01.png') // 读取图像
get_image_size(Image, Width, Height) // 获取尺寸
dev_display(Image) // 显示图像
区域(Region)
- 表示图像中的连通区域,用于目标提取。
- 示例代码:
1
2threshold(Image, Region, 128, 255) // 阈值分割得到区域
connection(Region, ConnectedRegions) // 连通域分析
轮廓(XLD)
- 亚像素精度的轮廓,用于边缘检测和几何测量。
- 示例代码:
1
edges_sub_pix(Image, Edges, 'canny', 1, 20, 40) // 提取亚像素边缘
1.2 变量与运算符
变量定义
- 动态类型:变量无需声明类型,根据赋值自动确定。
- 命名规则:字母开头,可包含数字和下划线(如
Region1
)。
运算符
- 算术运算符:
+
,-
,*
,/
- 关系运算符:
==
,>
,<
,!=
- 逻辑运算符:
and
,or
,not
- 集合运算符:
union
(并集),difference
(差集) - 示例:
1
2Area := 100
IsLarge := Area > 50 // 结果为 true
- 算术运算符:
1.3 实验:图像与区域操作
- 任务:读取图像并提取面积大于 100 像素的区域。
- 代码示例:
1
2
3
4
5read_image(Image, 'chip.png')
threshold(Image, Region, 100, 255)
connection(Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 100, 99999)
count_obj(SelectedRegions, Number)
第3课时:控制语句与运算符
2.1 控制语句
条件语句(if/else)
1
2
3
4
5if (Number > 0)
dev_display(SelectedRegions)
else
print('未找到目标区域')
endif循环语句(for/while)
1
2
3
4
5// 循环处理多张图像
for Index := 1 to 5 by 1
read_image(Image, 'part_' + Index$'.2d')
process_image(Image)
endfor
2.2 实验:循环处理图像
- 任务:批量读取 5 张图片并统计每张图的区域数量。
- 代码示例:
1
2
3
4
5
6
7for Index := 1 to 5 by 1
read_image(Image, 'image_' + Index$'02d')
threshold(Image, Region, 128, 255)
connection(Region, ConnectedRegions)
count_obj(ConnectedRegions, NumRegions)
print('图像 ' + Index + ' 区域数:' + NumRegions)
endfor
第4课时:函数与过程调用
3.1 函数定义与调用
函数定义:使用
procedure
关键字。1
2
3procedure calculate_area(Region: InputRegion, Area: out)
area_center(InputRegion, Area, Row, Column)
endprocedure参数传递
- 输入参数(
in
)、输出参数(out
)、输入输出参数(inout
)。 - 示例调用:
1
2calculate_area(SelectedRegions, TotalArea)
print('总面积:', TotalArea)
- 输入参数(
3.2 错误处理
- try/catch 语句:捕获运行时错误。
1
2
3
4
5try
read_image(Image, 'missing_file.png')
catch (Exception)
print('错误:文件未找到!')
endtry
3.3 实验:自定义函数
- 任务:编写函数计算图像的平均灰度值。
- 代码示例:
1
2
3
4procedure get_mean_gray(Image: in, MeanValue: out)
get_grayval(Image, 100, 100, GrayValue) // 示例简化逻辑
MeanValue := GrayValue
endprocedure
课后练习
- 编写脚本,提取图像中所有圆形区域并计算其半径。
- 使用循环语句实现图像的批量滤波(如高斯滤波)。
- 设计一个函数,判断区域是否为矩形(长宽比接近1)。
注意事项
- Halcon 变量名区分大小写(如
Image
和image
不同)。 - 调试技巧:使用
dev_display
和disp_message
实时观察变量状态。 - 常见错误:未加载图像时直接调用图像处理算子。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 广创科技教育-Blog!
评论