一、数据类型总览
HALCON 变量分为两大类,所有视觉运算都围绕这两类数据展开:
- Iconic(图标对象):存储图像、区域、轮廓等视觉实体,是图像处理的核心对象
- Image(图像)
- Region(区域)
- XLD(亚像素轮廓,Extended Line Description)
- Control(控制变量):存储数值、字符串、句柄等参数,用于逻辑控制与参数传递
- String(字符串)
- Integer(整型)
- Real(实型 / 浮点型)
- Handle(句柄,如窗口、采集设备、模板等)
- Tuple(元组):控制变量的数组形式,可存储多个同类型 / 不同类型的控制数据
在 HDevelop 变量窗口中,图标变量和控制变量分开展示,鼠标悬停在变量上可查看详细属性。
二、Image(图像)
图像是像素的矩阵集合,是视觉处理的输入源,核心属性包括像素类型、通道数、宽高尺寸。
1. 图像变量查看
鼠标移动到变量窗口的图像变量上,可直接查看:

- 类型:如 byte(8 位无符号,取值 0-255)
- 通道数:单通道 / 3 通道 / 多通道
- 尺寸:(宽度,高度),单位为像素
2. 按通道数分类
| 通道数 | 类型说明 | 典型场景 |
|---|---|---|
| 1 通道 | 灰度图,每个像素只有 1 个灰度值 | 常规工业检测、灰度分析 |
| 3 通道 | RGB 彩色图,或 HSV 等其他彩色空间图像 | 彩色物料分拣、颜色识别 |
| 多通道 | 超过 3 个通道的图像 | 遥感影像、多光谱成像、纹理特征分析 |
3. 通道操作相关算子
(1)基础查询
count_channels(Image, Num):统计图像的通道总数
(2)通道提取与分解
access_channel (Image, channel1, Index):提取多通道图中指定序号的单通道decompose3(Image, RedImage, GreenImage, BlueImage):将 3 通道 RGB 图分解为 R、G、B 三个单通道灰度图
(3)通道合并与追加
compose2(RedImage, GreenImage, MultiChannelImage):将 2 张单通道图合并为 2 通道图像append_channel (MultiChannelImage, BlueImage, ImageExtended):向已有多通道图追加新的通道
4. 示例
*读取图像
read_image (Image, 'ship.png')
*计算图像通道
count_channels(Image, Num)
*循环读取每个通道的图像
for I:= 1 to Num by 1
access_channel (Image, channel1, I)
*图像处理
endfor
*分解通道
decompose3(Image, RedImage, GreenImage, BlueImage)
*合并通道
compose2(RedImage, GreenImage, MultiChannelImage)
*向图像附加通道
append_channel (MultiChannelImage, BlueImage, ImageExtended)
三、Region(区域)
1. 基本概念
Region 是图像中满足特定条件的像素集合(二值区域),只有 "前景 / 背景" 之分,不包含灰度信息,是目标分割、缺陷检测的核心载体。
2. 区域特征查看
点击工具栏「特征检测」工具,选择 region 分类,可可视化查看区域的全部属性:

- 基础特征:面积、中心坐标、宽高
- 形状特征:圆度、矩形度、紧密度
- 矩特征:二阶矩、方向等
- 灰度特征:对应原图像的灰度均值、方差等
3. 图像转区域的两种方法
方法 1:代码阈值分割(最常用)
使用 threshold 算子,按灰度范围提取区域:
threshold(Image : Region : MinGray, MaxGray : )
- 输入:原始灰度图
- 输出:灰度值在
[MinGray, MaxGray]范围内的像素组成的区域
方法 2:可视化灰度直方图工具
- 点击工具栏「灰度直方图」图标
- 开启「使能输出」按钮
- 拖动红绿两条竖线调整灰度上下限
- 点击「插入代码」,自动生成 threshold 算子代码
4. 示例
* 关闭已有窗口
dev_close_window ()
* 读取示例图像
read_image (Aegypt1, 'egypt1')
* 获取图像尺寸
get_image_size (Aegypt1, Width, Height)
* 打开适配尺寸的窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Aegypt1)
* 阈值分割提取区域(灰度23~160的像素)
threshold (Aegypt1, Regions, 23, 160)
* 显示分割结果
dev_display (Regions)
四、XLD(亚像素轮廓)
1. 基本概念
XLD 全称 Extended Line Description ,即亚像素精度轮廓,是图像边缘的高精度描述,精度高于单个像素级别,用于高精度测量、轮廓匹配。

- Region 是「面」:一片像素的集合
- XLD 是「线」:连续的亚像素边缘点集合
2. XLD 特征查看
与 Region 操作一致:打开「特征检测」工具,选择 xld 分类,可查看:

- 基础特征:轮廓长度、包围盒尺寸
- 形状特征:圆度、紧密度、曲率
- 点特征:轮廓上所有点的坐标集合
3. 图像生成 XLD(亚像素边缘提取)
最常用算子 edges_sub_pix,可提取高精度亚像素边缘:
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)
- 参数说明:
'canny':边缘提取算法(canny 算子是工业最常用方案)2:高斯平滑系数12、22:双阈值的下限、上限
4. 完整实例流程
dev_close_window ()
* 读取图像
read_image (Image, 'fabrik')
* 打开适配图像的窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* 提取亚像素边缘
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)
* 显示轮廓结果
dev_display (Edges)
五、总结
| 类型 | 本质 | 核心用途 | 典型生成算子 |
|---|---|---|---|
| Image | 像素矩阵(带灰度 / 彩色信息) | 原始输入、灰度分析 | read_image |
| Region | 二值像素面集合 | 目标分割、面积统计 | threshold |
| XLD | 亚像素线轮廓 | 高精度测量、边缘定位 | edges_sub_pix |
视觉处理的经典链路:Image(原图)→ 阈值分割 → Region(目标区域)→ 提取边缘 → XLD(高精度轮廓)→ 测量计算