一、引言
在机器视觉领域,Halcon 作为一款强大且功能丰富的软件库,为开发者提供了广泛的工具和算子来处理各种复杂的视觉任务。而变量作为程序中存储和操作数据的基本单元,在 Halcon 编程中起着至关重要的作用。正确地创建和赋值变量是编写高效、准确的 Halcon 程序的基础。本文将深入探讨 Halcon 中不同类型变量的创建与赋值方法.
二、Halcon 变量类型概述
Halcon 支持多种类型的变量,每种类型都有其特定的用途和存储方式。以下是一些常见的变量类型:
- 图像变量(Image):用于存储图像数据,是 Halcon 中处理视觉信息的核心。图像可以从各种来源获取,如相机、图像文件等。
- 区域变量(Region):表示图像中的特定区域,可以是由轮廓、形状等定义的区域。区域变量在图像分析、目标检测等任务中经常使用。
- XLD 轮廓变量(XLD Contours):用于存储图像中的边缘轮廓信息,提供了更精确的轮廓表示,常用于特征提取和形状分析。
- 数值变量(Number):包括整数、浮点数等,用于存储数值型数据,如坐标值、参数值、计数器等。
- 字符串变量(String):用于存储文本信息,如文件名、路径、标签等。
三、图像变量的创建与赋值
3.1 从文件读取图像
最常见的创建图像变量并赋值的方式是从图像文件中读取图像。Halcon 提供了 read_image
算子来实现这一功能。以下是一个简单的示例:

在上述代码中:
dev_close_window
关闭当前可能存在的显示窗口。read_image
算子将名为fabrik
的图像文件读取到Image
变量中。这里的fabrik
是 Halcon 自带的示例图像文件名,你也可以替换为自己的图像文件路径和名称。dev_open_window_fit_image
根据图像的大小打开一个合适的显示窗口,并返回窗口句柄WindowHandle
。dev_display
在打开的窗口中显示读取的图像。
运行上述代码后,我们可以看到如下显示效果(此处插入从文件读取的 fabrik
图像的截图):

3.2 创建空图像
有时候我们需要创建一个空的图像变量,然后再对其进行操作。可以使用 gen_image_const
算子来创建一个具有特定类型和大小的空图像。例如:

在这段代码中,gen_image_const
创建了一个数据类型为 byte
,大小为 512x512 的空图像,并将其存储在 ImageEmpty
变量中。然后通过 dev_open_window_fit_image
和 dev_display
显示这个空图像。由于是空图像,显示出来的将是一个黑色的窗口(此处插入空图像显示的截图):

四、区域变量的创建与赋值
4.1 使用基本几何形状创建区域
Halcon 提供了多种算子来创建不同形状的区域。例如,使用 gen_rectangle1
可以创建一个矩形区域:

上述代码中,gen_rectangle1
根据给定的左上角坐标 (100, 100)
和右下角坐标 (200, 200)
创建了一个矩形区域,并将其存储在 Rectangle
变量中。dev_display
将该矩形区域显示在打开的窗口中(此处插入矩形区域显示的截图):

类似地,使用 gen_circle
可以创建一个圆形区域:

这里 gen_circle
根据圆心坐标 (256, 256)
和半径 100
创建了一个圆形区域,并存储在 Circle
变量中,然后通过 dev_display
显示(此处插入圆形区域显示的截图):

4.2 从图像中提取区域
除了创建基本几何形状的区域,还可以从图像中提取感兴趣的区域。例如,使用 threshold
算子进行阈值分割来提取区域:

在这段代码中,首先读取名为 coins
的图像,然后使用 threshold
算子将图像中灰度值在 100 到 255 之间的像素分割出来,形成区域并存储在 Regions
变量中。最后通过 dev_display
分别显示原始图像和提取的区域(此处插入原始图像和提取区域的显示截图):
运行前图:

运行后图:

五、XLD 轮廓变量的创建与赋值
5.1 使用边缘检测算子生成 XLD 轮廓
边缘检测是生成 XLD 轮廓的常见方法。例如,使用 edges_sub_pix
算子进行亚像素精度的边缘检测:

在上述代码中,先读取名为 gear
的图像,然后使用 edges_sub_pix
算子对图像进行 Canny 边缘检测,检测到的亚像素精度边缘存储在 Edges
变量中。最后通过 dev_display
显示原始图像和检测到的边缘轮廓(此处插入原始图像和 XLD 轮廓显示的截图):
检测前图片:

运行后图片:

六、数值变量的创建与赋值
数值变量的创建和赋值非常简单,直接使用赋值语句即可。例如:

在上述代码中,分别创建了整数变量 num1
并赋值为 10
,浮点数变量 num2
赋值为 3.14159
,以及计数器变量 counter
并初始化为 0
。这些数值变量可以在后续的计算和逻辑判断中使用。
运行结:

七、字符串变量的创建与赋值
字符串变量同样通过赋值语句创建和赋值。例如:

上述代码创建了三个字符串变量 filename
、path
和 label
,分别赋值为文件名、文件路径和一个标签文本。字符串变量常用于处理文件操作、显示信息等场景。
运行结果:

八、总结
通过本文对 Halcon 中不同类型变量的创建与赋值的详细介绍和丰富的程序演示,我们深入了解了图像变量、区域变量、XLD 轮廓变量、数值变量和字符串变量的操作方法。掌握这些变量的使用是进行 Halcon 机器视觉编程的基础,希望读者能够通过实践进一步巩固所学知识,并在实际项目中灵活运用这些变量来实现各种复杂的视觉任务。在后续的学习中,我们还将探索更多关于 Halcon 算子的组合应用和高级编程技巧。