【HALCON 实战入门】2. HALCON 快速入门

张开发
2026/4/17 18:57:10 15 分钟阅读

分享文章

【HALCON 实战入门】2. HALCON 快速入门
欢迎订阅【HALCON 实战入门】专栏1. HALCON 简介与安装2. HALCON 快速入门3. 图像读取、显示与保存4. 图像采集5. 交互式与 ROI2. HALCON 快速入门第 1 章安装 HALCON第 2 章HALCON 架构2.1 算子2.1.1 参数与数据结构2.2 扩展包2.3 语言接口2.3.1 HALCON/Python 接口2.3.2 HALCON/C 接口2.3.3 HALCON/C 接口2.3.4 HALCON/.NET 接口2.4 图像采集接口2.5 专用 I/O 接口第 3 章应用程序开发3.1 HDevelop3.2 示例程序3.2.1 在 HDevelop 中创建原型3.2.2 准备 Visual Studio 项目3.2.3 导出库项目3.2.4 将库项目集成到 Visual Studio 中第 4 章学习指南本文译自HALCONQuick Guide版权属于 Copyright © 2003-2025 by MVTec Software GmbH, Munich, Germany。有关 HALCON 的更多信息请访问https://www.halcon.com关于本手册本手册对 HALCON 进行介绍面向无 HALCON 使用基础的初学者。本手册包括以下主题HALCON 安装本章介绍 MVTec 软件管理器SOM。HALCON 架构本章讲解理解 HALCON 及其工作原理所需的部分理论基础。应用开发方法本章阐述基于 HALCON 进行开发的三种基本方式并通过首个编程实例引导您上手。后续学习指引本章列出可参考的其他信息来源。第 1 章安装 HALCONHALCON 是德国 MVtec 公司开发的一款综合性的机器视觉标准软件拥有全球通用的集成开发环境HDevelop。对于 Linux 和 Windows 用户我们建议通过MVTec 软件管理器SOM下载并安装 HALCON。SOM 是一款用于软件包的安装管理器可访问远程产品目录并支持软件包的下载与安装等功能。通过 SOM 安装 HALCON 的详细步骤说明请参阅《安装指南》。注通过 SOM 安装 HALCON 的详细步骤说明请参阅 【HALCON 实战入门】1. HALCON 简介与安装。第 2 章HALCON 架构HALCON 的基础架构如图 2.1 所示。其核心部分为图像处理库包含超过 2000 个算子。通过扩展包可以开发自定义算子。在应用程序中可以通过各类语言接口调用这些算子例如 HALCON/C 或 HALCON/Python。这些接口库支持以对应编程语言的典型编程风格直接使用算子。针对图像采集设备的接入HALCON 提供图像采集接口可以使用统一的方式操控各类不同的图像采集设备。包含设备专属实现逻辑的库会在需要时动态加载。类似地I/O 设备通过专用 I/O 接口进行访问。图 2.1HALCON 基础架构。2.1 算子HALCON 库中的所有功能都是通过算子Operators完成的。每个算子都包含多种实现方法可以通过参数选择。所有算子的列表可以在 HALCON 算子参考手册HALCON Operator Reference中查看该手册提供了 HDevelop, .NET, Python, C, 和 C syntax 接口语法。算子的特性如下算子之间不存在层级关系。算子自然会形成逻辑分组。算子的设计遵循开放式架构规范。许多算子可自动实现并行化处理且对用户透明。算子的输入、输出参数遵循标准化排序规则输入图像参数、输出图像参数、输入控制参数、输出控制参数。2.1.1 参数与数据结构HALCON 包含两类基础参数类型图像类数据与控制类数据。图像类数据包含 图像、区域和 XLD扩展线型描述eXtended Line Description。图像图像主要由多个通道构成即由包含像素值的矩阵组成。同一幅图像的所有通道尺寸均相同。关于像素与通道的详细说明请参阅 HALCON 算子参考手册中的 “图像” 章节。每幅图像均可通过 ** 感兴趣区域ROI** 指定需要处理的图像部分。关于 ROI 处理的详细内容见《解决方案指南 ISolution Guide I》中的 “感兴趣区域ROI” 章节。区域区域是一组像素的集合。区域内的像素无需相互连通即使是任意离散的像素集合也可作为单个区域处理。使用 connection 算子可将一个区域拆分为多个连通区域即由连通像素构成的组件。XLDXLD 包含所有基于轮廓与多边形的数据。亚像素精度算子如 edges_sub_pix会以 XLD 数据形式返回轮廓。轮廓是一系列由线段连接的二维控制点控制点之间的间距通常约为一个像素。XLD 对象除控制点外还包含局部属性与全局属性。典型示例包括控制点的边缘幅值、轮廓段的回归参数等。除提取 XLD 对象外HALCON 还支持对其进行后续处理例如根据指定特征范围筛选轮廓、将轮廓分割为直线、圆弧、多边形或平行线等。控制类数据包含 句柄handles 以及整数、浮点数、字符串等基本数据类型。句柄handles是对复杂数据结构的引用例如图像采集接口的连接或基于形状匹配的模板。出于效率与数据安全考虑算子之间传递的并非完整数据结构而仅传递句柄。句柄是具有特定意义的标识值禁止修改并且在不同运行环境、不同软件版本之间可能存在差异。当所有引用均被覆盖后句柄会被自动释放。使用句柄的典型场景包括图形窗口、文件、套接字、图像采集接口、OCR、OCV、测量以及匹配。2.2 扩展包HALCON 包含了丰富的算子库也可以通过自定义新算子进行扩展。HALCON 提供了扩展包接口支持以扩展包的形式集成使用 C 语言开发的新算子。扩展包接口包含若干预定义例程与宏便于在 C 语言中便捷处理图像数据与内存对象。新算子成功集成后即可与其他 HALCON 原生算子一样正常使用。有关扩展算子库的详细信息请参阅《扩展包程序员手册Extension Package Programmer’s Manual》。2.3 语言接口HALCON 提供了各类语言接口原生支持 Python、C、C 及 .NET 语言接口可以在应用程序中直接调用 HALCON 算子并使用其数据类型。开始开发前我们建议先查看可直接运行的示例程序。通过示例您可以了解项目的搭建方式以及算子与数据类型的使用方法。为符合对应编程语言的通用规范不同语言接口在类型名称、类、算子命名规则等方面可能会存在差异。各支持编程语言对应的算子原型在《HALCON 算子参考手册HALCON Operator Reference》中提供了详细说明。2.3.1 HALCON/Python 接口Python 接口凭借其简洁性和快速原型开发能力脱颖而出。在导入 HALCON/Python 模块后HALCON 算子可直接作为独立函数进行调用。注意HALCON/Python 中的算子参数被划分为函数参数输入与返回值输出两部分。示例以下代码读取一幅图像并计算其中的连通区域数量。本例程的前提条件与详细说明请参阅《程序员指南Programmer’s Guide》中的Part 4, 首个示例程序。imgha.read_image(pcb)regionha.threshold(img,0,122)num_regionsha.count_obj(ha.connection(region))print(fNumber of Regions:{num_regions})2.3.2 HALCON/C 接口C 语言接口是 HALCON 支持的最简接口。HALCON 算子的本身就是由 C 语言实现的C 语言是原生接口支持最好。每个算子对应一个或两个全局函数算子名称与参数顺序均与 HDevelop 语言相同。示例以下代码读取一幅图像并计算其中的连通区域数量。本例程的前提条件与详细说明请参阅《程序员指南Programmer’s Guide》中的Part 5, 首个示例程序。Hobject img;read_image(img,pcb);Hobject region;threshold(img,region,0,122);Hobject connected_regions;connection(region,connected_regions);Hlong num_regions0;count_obj(connected_regions,num_regions);printf(Number of Regions: %PRIdPTR\n,num_regions);2.3.3 HALCON/C 接口C 接口比 C 接口复杂得多应用了 C 面向对象编程的优点包括自动类型转换、构造和析构函数等。另外和 C 接口一样也为每个 HALCON 算子提供了全局函数来实现程序化的编程风格a procedural style of programming。读取图像并计算连接区域(connected regions)数量的 C 接口实现代码如下。C 接口比 C 语言接口复杂也更加完善。它充分应用了 C 面向对象编程的优点例如自动类型转换、对象构造与析构以及将函数与其数据封装为类。C 也为每个 HALCON 算子提供了全局函数以支持与 C 接口类似的过程式编程风格。示例以下代码读取一幅图像并计算其中的连通区域数量。本例程的前提条件与详细说明请参阅《程序员指南Programmer’s Guide》中的Part 2, 首个示例程序。HImage img{pcb};HRegion regionimg.Threshold(0,122);Hlong numRegionsregion.Connection().CountObj();std::coutNumber of Regions: numRegions\n;2.3.4 HALCON/.NET 接口C# 与 Visual Basic.NET 通过 .NET 接口使用 HALCON。与 C 类似它提供两种编程风格过程式编程与面向对象编程。在过程式编程风格中类 HOperatorSet 提供了全部 HALCON 算子其中使用 HObject 管理图像类数据使用 HTuple 管理控制类数据。在面向对象编程风格中系统提供了如 HDataCode2d、HMeasure、HShapeModel 等类以实现核心功能还提供了用于图像类数据的类例如 HImage 和 HRegion。示例以下代码读取一幅图像并计算其中的连通区域数量。本例程的前提条件与详细说明请参阅《程序员指南Programmer’s Guide》中的Part 3, 首个示例程序。HImage imgnewHImage(pcb);HRegion regionimg.Threshold(0d,122d);intnumRegionsregion.Connection().CountObj();Console.WriteLine(Number of Regions: numRegions);2.4 图像采集接口图像采集接口是图像采集设备厂商提供的软件与 HALCON 之间的桥梁。这些接口构成了一套通用、统一的接口仅需少量算子即可完成操作。详细信息请参阅《解决方案指南 II-ASolution Guide II-A》。HALCON 通过动态库Windows: 动态加载库 DLLs, Linux: 共享库 shared libraries的形式为 50 多个图像采集卡和数百种工业相机提供图像采集接口。库文件名以 hAcq 为前缀开头HALCON XL 使用的库文件以 xl 为后缀结尾。基于行业标准、应用最广泛的接口已随 HALCON 库一同安装。其它接口以及已包含接口的最新版本可从网址 https://www.mvtec.com/products/interfaces 下载。MVTec 会持续开发新接口当设备厂商软件变更时对应的 HALCON 接口也会随之适配。如需查看所支持图像采集接口的完整列表也可参阅《图像采集接口参考手册Image Acquisition Interface Reference》。图像采集设备安装成功后在 HALCON 中可以通过调用算子 open_framegrabber 访问设备只要指定图像采集接口名称及连接参数即可。然后通过调用算子 grab_image或 grab_image_async即可采集图像。2.5 专用 I/O 接口HALCON 为多种 I/O 设备提供接口以实现数据采集。这些接口使用动态库Windows: 动态加载库 DLLs, Linux: 共享库 shared libraries。库文件名以 hio 为前缀开头HALCON XL 使用的库文件以 xl 为后缀结尾。HALCON 对不同 I/O 设备使用同一类算子实现统一访问。安装好 I/O 设备后调用算子 open_io_device 建立连接指定 I/O 设备接口名称及可选的设备专属参数。连接建立后通过调用 open_io_channel 打开传输通道然后使用算子 read_io_channel 和 write_io_channel 进行数值读写。请注意HALCON I/O 设备接口的最新信息及可下载的接口含文档可在网址 https://www.mvtec.com/products/interfaces 获取。如需查看所支持 I/O 设备接口的完整列表可参阅《I/O 设备接口参考手册I/O Device Interface Reference》。第 3 章应用程序开发HDevelop 是面向 HALCON 机器视觉库的交互式开发环境。推荐用户先在 HDevelop 中进行快速原型开发。可以通过 HDevelop 找到最优的算子与参数以完成图像分析任务。在完成 HDevelop 程序开发后需要将其移植到最终运行环境中。有三种方式可以选择从头编写程序从头编写程序意味着将 HDevelop 代码手动转换为目标编程语言C、Python 等。注意不同编程语言在算子命名规范、类名等方面可能存在差异详见《HALCON 算子参考手册》、《程序员指南》。导出 HDevelop 代码使用 HDevelop 的代码导出功能可以自动将 HDevelop 代码转换为目标编程语言代码。导出库项目HDevelop 的库导出功能会生成一个可直接使用的项目文件夹其中包含目标语言的封装代码以及用于构建项目的 CMake 文件。该功能基于 HDevEngine 解释器实现可以在 C 或任何可集成 .NET 对象的编程语言编写的应用程序中直接执行 HDevelop 程序。因此当修改 HDevelop 代码时无需重新编译整个应用程序。也可以直接使用 HDevEngine详见《程序员指南》Part6HDevEngine 的使用方法。3.1 HDevelop我们先来初步了解一下 HDevelop。图 3.1 展示的是加载并部分执行一段程序后的 HDevelop 用户界面。图 3.1HDevelop 用户界面默认情况下以下窗口为可见状态它们也是使用 HDevelop 进行开发的核心窗口图形窗口GraphicsWindow显示中间结果即图像类数据如图像、区域和 XLD 轮廓。程序窗口ProgramWindow在此窗口中编写程序代码通过算子调用 HALCON 的图像处理功能。变量窗口VariableWindow显示所有变量包括图像类变量与控制类变量。有关 HDevelop 的详细说明请参阅《HDevelop 用户指南HDevelop User’s Guide》。下面的视频教程也可以作为学习 HDevelop 的入门教程HDevelop 教程 01界面与导航GUI and NavigationHDevelop 教程 02变量VariablesHDevelop 教程 03可视化Visualization3.2 示例程序在学习 HALCON 基本概念和 HDevelop 用户界面之后我们将使用库导出方式开发一个 C 应用程序。接下来本节将介绍详细的操作步骤您也可以观看相关教程视频通过库项目导出将 HDevelop 代码集成到 C 应用程序Integrate HDevelop code into a C application using the Library Project Export通过库项目导出将 HDevelop 代码集成到 C# 应用程序Integrate HDevelop code into a C# application using the Library Project Export。这些视频演示了库导出的完整流程。3.2.1 在 HDevelop 中创建原型本示例的任务是读取一幅图像并计算其中的连通区域数量。打开 HDevelop并将以下代码输入到程序窗口中read_image(Image,pcb)threshold(Image,Region,0,122)connection(Region,ConnectedRegions)count_obj(ConnectedRegions,Number)通过点击工具栏中的运行或按F5键来测试您的程序。为便于将此 HDevelop 代码集成到实际应用程序中我们将机器视觉部分封装到一个本地过程中。高亮选中以下代码行threshold(Image,Region,0,122)connection(Region,ConnectedRegions)count_obj(ConnectedRegions,Number)单击鼠标右键打开上下文菜单。选择 “创建新过程Create New Procedure”。将其命名为count_regions。选择 “参数”并将选择方案更改为“先入后出First In Last Out”。点击 “确定” 确认。将 HDevelop 程序保存为hdev_count_regions.hdev。3.2.2 准备 Visual Studio 项目本示例将使用 Visual Studio 2019。创建一个空的 C Windows 控制台项目命名为vs_count_regions。请勾选 “将解决方案和项目放在同一目录中” 选项。添加 C 源文件菜单项目 → 添加新项 → C 文件并命名为vs_count_regions.cpp。在工具栏的下拉菜单中选择解决方案平台 x64。打开项目属性菜单项目 → vs_count_regions 属性并进行以下设置选择 C/C → 常规添加以下附加包含目录(HALCONROOT)\include\halconcpp选择 链接器 → 常规添加以下附加库目录KaTeX parse error: Undefined control sequence: \lib at position 13: (HALCONROOT)\̲l̲i̲b̲(HALCONARCH)选择 链接器 → 输入添加以下附加依赖项halconcpp.lib;hdevenginecpp.lib3.2.3 导出库项目接下来将 HDevelop 程序hdev_count_regions.hdev导出到 Visual Studio 项目文件夹中。打开此前创建的 HDevelop 程序hdev_count_regions.hdev。打开 文件 → 导出库项目。进行以下设置输入文件当前程序目标语言C项目名称hdev_count_regions项目位置选择 Visual Studio 项目 vs_count_regions 所在路径。命名空间hdev_count_regions单击 “导出” 确认。现在Visual Studio 项目文件夹 vs_count_regions 中至少应包含以下文件vs_count_regions.cpp源文件vs_count_regions.sln解决方案hdev_count_regionsHDevelop 导出的文件夹cmakeres_hdev_count_regionshdev_count_regions.hdevsourcehdev_count_regions.cpphdev_count_regions.hCMakeLists.txt3.2.4 将库项目集成到 Visual Studio 中最后需要将 HDevelop 程序集成到 Visual Studio 项目中。打开 Visual Studio 项目。打开 “项目 → 添加现有项”选择由 HDevelop 库导出功能创建的 C 文件hdev_count_regions.cpp和头文件hdev_count_regions.h。文件位于 hdev_count_regions\source 文件夹中将以下代码输入到vs_count_regions.cpp中。#includeiostream#includeHalconCpp.h#includehdev_count_regions/source/hdev_count_regions.hintmain(){HalconCpp::HImageImage(pcb);hdev_count_regions::SetResourcePath(hdev_count_regions/res_hdev_count_regions);HalconCpp::HTuple Number{};hdev_count_regions::count_regions(Image,Number);std::coutNumber of Regions: Number.L()\n;}执行程序。控制台打开并显示结果 “Number of regions: 43”。第 4 章学习指南如果要更深入地学习 HALCON我们提供了更多文档与支持资源。MVTec 学院MVTec 学院提供大量交互式在线课程涵盖从基础概念到高级专项应用的众多主题。请访问 https://academy.mvtec.com 了解更多信息。HDevelop 示例程序HALCON 提供丰富的示例程序不仅适用于 HDevelop也支持多种编程语言。这些示例可在环境变量 %HALCONEXAMPLES% 指向的目录中找到若未设置该变量则位于 HALCON 安装目录下的 examples 子文件夹中。打开 HDevelop 示例程序的方法选择菜单“文件 → 浏览 HDevelop 示例程序…”。若要学习 HALCON 基础概念建议查看示例程序halcon_basic_concepts.hdev。服务与支持mvtec 官网https://www.mvtec.com/services-support 提供多种支持资源例如教程视频、研讨会与培训信息、包含开发技巧的开发者专区等更多内容。HALCON 文档HALCON 文档包含从入门到专家级的丰富资料。例如我们的解决方案指南详细讲解机器视觉方法及其在 HDevelop 中的应用。推荐从【解决方案指南 ISolution Guide I】开始学习它介绍了主流机器视觉方法。所有手册的概述与简要说明可在文档首页查看。【本节完】版权声明本文译自HALCONQuick Guide版权属于 Copyright © 2003-2025 by MVTec Software GmbH, Munich, Germany。转发必须注明原文链接【HALCON 实战入门】2. HALCON 快速入门 (https://youcans.blog.csdn.net/article/details/160250188)Copyright by youcansqq.com 2026Crated2026-04

更多文章