1. HALCON开发环境搭建

HALCON 是 MVTec 公司推出的机器视觉算法库,其开发环境由三部分构成:底层算法库(HALCON Library)、交互式集成开发环境 HDevelop,以及连接二者的许可证与运行时机制。理解这三者的关系,是后续所有开发工作的前提。本章从安装、许可、界面到第一个可运行程序,走通一条完整的入门路径。

一、安装与目录结构

HALCON 的安装包通常命名为 halcon-XX.XX.XX-windows.exe(Windows)或 .tar.gz(Linux),其中 XX.XX.XX 为版本号,例如 24.11。安装过程中需要关注三个关键选择:

  • 安装路径:默认 C:\Program Files\MVTec\HALCON-24.11-Progress。路径中不要包含中文或空格,否则部分编译工具链可能报错。
  • 组件选择:至少勾选 HALCON Core、HDevelop、Image Acquisition Interfaces(图像采集接口)与 Programming Interfaces(C++/C#/Python 等语言接口)。
  • 环境变量:安装程序会自动写入 HALCONROOT、HALCONARCH、PATH。若手动部署,需自行设置,例如 HALCONROOT=C:\Program Files\MVTec\HALCON-24.11-Progress,HALCONARCH=x64-win64。

安装完成后,目录中几个子文件夹值得记住:bin\x64-win64 存放可执行文件与动态库;include 与 lib 供 C++ 开发引用;examples 内含大量按主题分类的示例程序,是学习算子用法最直接的资源;help 为离线文档。验证安装是否成功,可在命令行执行 hdevelop -version,若返回版本号即表示环境变量生效。

二、许可证管理

HALCON 的许可证分为两类:开发许可证(Development License)用于 HDevelop 与编译调试,运行许可证(Runtime License)用于部署后的应用程序。二者都通过加密狗(USB Dongle)或软授权(License File)提供。常见形式包括:

许可类型载体典型用途
开发许可USB 加密狗 / 软授权文件HDevelop 编程、调试
运行许可加密狗 / 授权文件部署到客户机运行
试用许可软授权(限时)评估与学习

授权文件通常为 .dat 或 .lic,需放置到 %HALCONROOT%\license 目录,或通过环境变量 HALCON_LICENSE_FILE 指定路径。若使用加密狗,需安装驱动 HASP 并确认系统识别到设备。在 HDevelop 中可通过菜单 Help → License Info 查看当前授权状态、到期时间与可用模块。若提示 “No license found”,优先检查:授权文件路径是否正确、加密狗是否被识别、系统时间是否被篡改。

学习阶段可使用官方提供的试用授权,通常有效期为 30 天,功能与正式开发许可一致,足够完成本书大部分示例。

三、HDevelop 界面导航

HDevelop 采用多窗口布局,核心区域包括:

  • 程序窗口(Program Window):编写与编辑 HALCON 程序的主区域,支持语法高亮、自动补全与断点。
  • 变量窗口(Variable Window):显示当前程序运行后所有变量的名称、类型与值,图像变量以缩略图呈现。
  • 图形窗口(Graphics Window):显示图像、区域、轮廓、XLD 等可视化结果,支持缩放、平移与颜色调整。
  • 算子窗口(Operator Window):按类别浏览全部算子,双击即可插入到程序中,并自动生成参数占位符。
  • 程序执行工具栏:包含“运行”“单步执行”“执行到光标”“停止”等按钮,是调试的核心入口。

建议初学者先熟悉三个快捷键:F5 运行整个程序,F6 单步执行,F9 在光标处设置断点。配合变量窗口观察每一步的中间结果,是理解算子行为最有效的方式。

HALCON 开发环境组成与数据流 安装与配置 HALCONROOT / HALCONARCH bin / include / lib / examples 图像采集接口 + 语言接口 hdevelop -version 验证 许可证管理 开发许可 / 运行许可 / 试用 .dat / .lic / USB 加密狗 HALCON_LICENSE_FILE Help → License Info 查看 HDevelop 界面 程序窗口 / 变量窗口 图形窗口 / 算子窗口 F5 运行 / F6 单步 / F9 断点 调试与可视化核心 第一个图像处理程序:从读图到结果输出 read_image 读取图像 rgb1_to_gray 转灰度 threshold 阈值分割 connection 连通域分离 select_shape 按面积筛选 结果输出:dev_display 显示区域 + area_center 计算面积与中心 变量窗口查看 Region 数量、面积值、行列坐标

四、第一个图像处理程序

下面这段程序完成一个典型任务:读取一张工业零件图像,提取其中的目标区域,并输出每个区域的面积与中心坐标。在 HDevelop 中新建程序,输入以下代码:

read_image (Image, 'particle')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 128, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500, 99999)
area_center (SelectedRegions, Area, Row, Column)
dev_display (Image)
dev_set_color ('red')
dev_display (SelectedRegions)

逐行理解:read_image 从 HALCON 自带图像库读取名为 particle 的示例图;rgb1_to_gray 将三通道彩色图转为单通道灰度图,便于后续阈值处理;threshold 以 128 为下限、255 为上限做灰度分割,得到候选区域;connection 把可能连在一起的区域拆分为独立连通域;select_shape 按面积特征筛选,保留面积在 500 到 99999 像素之间的区域;area_center 计算每个保留区域的面积与中心行列坐标,结果分别存入 Area、Row、Column 三个数组。

运行后,图形窗口会显示原图,并用红色叠加显示筛选出的区域。此时切换到变量窗口,可以看到 SelectedRegions 的类型为 region 数组,Area 为整数数组,Row 与 Column 为浮点数组。若 SelectedRegions 为空,说明阈值区间或面积范围设置不合理,可先调低面积下限,或使用 灰度直方图 工具观察图像灰度分布后再确定阈值。

示例中的 128、255、500、99999 均为教学用假设参数,实际项目中应根据图像对比度、目标尺寸与噪声水平重新标定,不能直接照搬。