Halcon快速入门

news2024/11/23 17:19:06
  • 前言
  • 一,HALCON 概述
  • 1.1,HALCON 安装
  • 二,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.1,HDevelop
    • 3.2,示例程序
  • 四,更多参考资料

前言

工业智慧视觉应用主要涉及四个场景:识别、测量、定位、检测。

  • 识别:识别物体的物理特征,包括形状、颜色、字符和条码等,常见的应用场景是 OCR,读取零部件上的字母、数字、字符等用于溯源。
  • 测量:把获取到的图像像素信息标定成常用的度量衡单位,再通过精确计算出目标的几何尺寸。
  • 定位:获取目标的二维/三维位置信息,常用语元件定位,用以辅助机器臂进行后续的抓取等动作。
  • 检测:一般特指缺陷检测,判断产品是否存在缺陷,如零部件缺陷检测等。

image

一,HALCON 概述

HALCON 是德国 MVtec 公司开发的一款综合性的机器视觉标准软件,拥有全球通用的集成开发环境(HDevelop)。它节约了产品成本,缩短了软件开发周期——HALCON 灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的机器视觉(Machine Vision)软件。

MVTec 提供了 5 种软件:HALCON、MERLIC、深度学习工具、接口、嵌入式视觉,其中 HALCON 是最核心和应用最广的。

HALCON 主要提供的技术有:条形码和二维码读取、BLOB 分析、物图像分类、计算光学成像、过滤技术、缺陷检查、匹配、1D/2D/3D 测量、形态学处理、OCR 和 OCV、基于样本的识别(SBI)、亚像素边缘检测和线条提取技术、深度学习和 3D 视觉技术。

所谓 Blob 分析,即是从连通像素中提取具有相同逻辑状态的特征 (Blob)。

更多技术的描述请参阅官网资料。

image

1.1,HALCON 安装

注意:HALCON 目前不支持 arm 处理器版的 M1 Pro 机器,而且目前主流是在 Windows 开发居多。

注意,需要先在官网注册账号,然后才能下载对应软件,MVTec HALCON 提供两个不同的软件版本:HALCON 订阅版 (HALCON Progress) 和 HALCON 永久版 (HALCON Steady)。两个版本是完全独立的。 需要许可证,这意味着没有可能从一个版本 "切换" 到另一个版本。

HALCON 下载安装步骤如下所示:

  1. 进入 HALCON 官网,选择产品版本、操作系统以及架构后就会下载对应版本软件直接点击下载好的安装包即可安装。
  2. 安装的详细步骤截图如下所示,试用版不用安装 license 文件,跳过即可。

image

image

image

image

二,HALCON 架构

HALCON 架构如下图 2.1 所示。HALCON 机器视觉软件的主要部分就是图像处理库,其由超过 2000 多个算子组成,当然我们也可以通过拓展包的形式开发自定义算子,并在程序中使用。

image

HALCON 提供了通用的图像采集接口来支持不同的图像采集设备(3D相机、相机等),包好特定设备的实现库会在程序运行时动态加载。

2.1,算子

Operators。

我们使用 HALCON 库中任何功能实际上都是通过算子(Operators)完成的,每个功能都有多种实现方法,其可以通过算子参数选择。完整的算子列表在 HALCON Operator Reference,其提供了 HDevelop, .NET, Python, C++, 和 C syntax 接口。HALCON库提供的算子的重要特征如下:

  • 算子之间没有层次结构,所有算子都是一个级别的。
  • 存在逻辑算子。
  • 很多算子可以使用并行加速技术。
  • 算子的输入输出参数的排序是有标准化规则: 输入图标(iconic)、输出图标、输入控制和输出控制。

2.1.1,参数和数据结构

Quick Guide to HALCON Parameters and Data Structures

HALCON 算子的参数有两种基本类型:图标数据和控制数据(iconic data and control data)。图像、区域(regions)和 XLD(拓展线描述) 属于标志性数据。

  • Images(图像)即包含像素值的矩阵,由多个通道组成,其详细定义可以参考《数字图像处理》书籍。这里感兴趣区域 ROI 指的是输入图像的哪一部分区域会被处理,ROI 可以灵活定义,从简单的矩形到一组未连接到像素点都支持。
  • Regions 由一系列像素组成。区域之中的像素可以不互相连接,任意像素集合都可以作为单个区域处理。
  • XLDS 包括所有基于轮廓和多边形的数据。像 edges_sub_pix 这样的亚像素精度算子将轮廓作为 XLD 数据返回。 轮廓是一系列 2D 控制点,由线连接。 通常,控制点之间的距离约为 1 个像素。 除了控制点之外,XLD 对象还包含所谓的局部和全局属性。 这些的典型示例是,例如,控制点的边缘幅度或轮廓段的回归参数。 除了提取 XLD 对象外,HALCON 还支持进一步处理。 这方面的示例是基于给定特征范围的轮廓选择,用于将轮廓分割成线、弧、多边形或平行线。

控制数据(control data)包括句柄和基本数据类型,如整数、实数、字符串。

句柄是对复杂数据结构的引用,例如,与图像采集接口或基于形状匹配的模型的连接。 出于效率和数据安全的原因,在操作符之间传递的不是整个结构而是只有句柄。 句柄是不能更改的神奇值(magic values),并且可能因执行和版本而异。 一旦所有引用被覆盖,它们就会自动清除。 使用句柄的示例有图形窗口、文件、套接字、图像采集接口、OCR、OCV、测量和匹配

2.2,拓展包

为了支持特殊硬件或实现新的算法,HALCON 支持以 C 语言实现的自定义算子。拓展包接口包含几个预定义的例程和宏,用于在 C 中轻松处理图像数据和内存对象。成功集成新算子后,它可以像任何其他 HALCON 算子一样使用。

2.3,接口

HALCON 支持Python、C、C++ 和 .NET 语言接口,对于·不同编程语言接口,其数据类型、类和算子的命名会有所不同。

2.3.1,HALCON-Python 接口

读取图像并计算连接区域(connected regions)数量的示例代码如下。

img = ha.read_image('pcb')
region = ha.threshold(img, 0, 122)
num_regions = ha.count_obj(ha.connection(region)) print(f'Number of Regions: {num_regions}')

2.3.2,HALCON-C 接口

C 接口是 HALCON 支持的最简单的接口,每个算子由 1 或 2 个全局函数表示,其中算子的名称和参数序列和 HDevelop 语言相同。

因为 HALCON 算子的本身就是由 C 语言实现的,所以 C 是原生接口,支持也是最好。

以下示例代码也是实现读取图像并计算连接区域(connected regions)数量。

Hobject img;
read_image(&img, "pcb");
Hobject region;
threshold(img, &region, 0, 122);
Hobject connected_regions;
connection(region, &connected_regions);
Hlong num_regions = 0;
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++ 接口实现代码如下。

HImage img{"pcb"};
HRegion region = img.Threshold(0, 122);
Hlong numRegions = region.Connection().CountObj();
std::cout << "Number of Regions: " << numRegions << '\n';

2.3.4,HALCON-.NET 接口

2.4,图像获取接口

HALCON 通过动态库(Windows: 动态加载库 DLLs, Linux: 共享库 shared libraries)的形式为 50 多个图像采集卡和数百个工业相机提供采集图像的接口。库名称以前缀 hAcq 开头;HALCON XL 使用以 xl 结尾的库。

HALCON 图像采集接口的更新会比 HALCON 库本身更新更为频繁。

成功安装好图像采集设备后,通过 open_framegrabber 算子(需配置设备的名称和其他信息)访问设备,通过 grab_image 算子获取图像。

2.5,I/O 接口

HALCON 对不同 I/O 设备使用同一类算子实现统一访问。安装好 I/O 设备后,使用 open_io_device 算子建立连接,指定 I/O 设备接口的名称;建立连接后,通过调用 open_io_channel 来打开传输通道,然后使用 read_io_channelwrite_io_channel 算子读取和写入值。

三,如何开发应用

官方推荐使用 HDevelop(HALCON 机器视觉库的交互式开发环境) 进行快速原型设计。在开发好 HDevelop 程序后需要将其转换为最终环境,方法有以下三种:

  • Start from Scratch: 从头(scratch)开始编写程序意味着手动将 HDevelop 代码翻译成目标编程语言(C++、Python...)。
  • 导出 HDevelop 代码: 使用 HDevelop 的代码导出功能将您的 HDevelop 代码自动翻译成目标编程语言。
  • 导出库项目::HDevelop 的库导出会生成一个即用型项目文件夹,包括目标语言的包装代码和用于构建项目的 CMake 文件。 HDevelop 的库导出使用 HDevEngine,一个充当解释器的库。

3.1,HDevelop

默认情况下,HDevelop 窗口入下图 3.1 所示,窗口主要分为 3 类

  1. **图形窗口: **显示(中间)结果。即显示图像、区域和 XLD 等标志性数据。
  2. **程序窗口: **即输入和编辑代码的地方。
  3. 变量窗口: 显示所有变量。即显示图标变量(iconic variables)和控制变量。图标变量包含图标数据,控制变量包含控制数据。

image

3.2,示例程序

推荐观看视频教程: Integrate HDevelop code into a C++ application using the Library Project Export。

分步说明的描述可以参考 《quick_guide》 文档的3.2 节内容。

四,更多参考资料

HALCON 相关文档描述及下载链接汇总如下表所示。

REFERENCE MANUAL 参考手册下载链接文件大小
HALCON Operator Reference(HALCON 算子参考资料)下载 PDF在线阅读 (需要 Javascript)24.8 MB
BASICS 基础知识下载链接文件大小
Quick Guide(快速指南)下载 PDF2.6 MB
Installation Guide(安装指南)下载 PDF0.4 MB
HDevelop Users' Guide(HDevelop 用户指南)下载 PDF6.2 MB
Solution Guide I - Basics(解决方案指南 I - 基础知识)下载 PDF6.7 MB
Solution Guide II - A - Image Acquisition(解决方案指南 II-B - 图像采集)下载 PDF0.7 MB
Solution Guide II - B - Matching(解决方案指南 II-B - 匹配)下载 PDF3.4 MB
Solution Guide II - C - 2D Data Codes(解决方案指南 II-C - 二维码)下载 PDF4.6 MB
Solution Guide II - D - Classification(解决方案指南 II-D - 分类)下载 PDF4.3 MB
Solution Guide III - A - 1D Measuring(解决方案指南 III-A - 1D 测量)下载 PDF1.2 MB
Solution Guide III - B - 2D Measuring(解决方案指南 III-B - 2D 测量)下载 PDF2.5 MB
Solution Guide III - C - 3D Vision(解决方案指南 III-C - 3D 视觉)下载 PDF14.2 MB
Technical Updates(技术更新)下载 PDF0.2 MB

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM家政服务预约小程序(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

开源版商城源码V2.0【小程序 + H5+ 公众号 + APP】

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款轻量级、高性能、前后端分离的电商系统&#xff0c;&#xff0c;支持微信小程序 H5 公众号 APP&#xff0c;前后端源码完全开源&#xff0c;看见及所得&#xff0c;完美支持二…

[附源码]Python计算机毕业设计SSM家政服务管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue中的h函数与JSX语法

vue不仅像react一样实现了jsx&#xff0c;而且还借助jsx发挥了javascript动态画的优势&#xff0c;了解学习jsx可以让你更灵活的开发需求。 一、 h函数 在聊vue中的JSX之前&#xff0c;需要简单介绍一下 h 函数&#xff0c;理解了 h 函数&#xff0c;会更好的理解JSX。 1.h函…

[附源码]计算机毕业设计基于Springboot作业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

WebLogic JVM Core dumps文件的生成控制

一&#xff0c;背景 当我们运行的WebLogic JVM发生Fatal Error时&#xff0c;会造成JVM crash掉&#xff0c;进而造成进程终止。一般来说crash的时间我们是无法估计在什么时候的&#xff0c;它具有很大的偶然性&#xff0c;因此理论上有时我们希望自动产生Core dump文件来提供…

figma有哪些快速入门的好用技巧

使用Figma在创建设计系统或处理大型设计项目时&#xff0c;总会涉及批量修改.快速定位.自动布局问题&#xff0c;MarcAndrew这篇文章分享了技巧&#xff0c;可以大大提高设计效率&#xff0c;希望对大家有所帮助: 在这篇文章中&#xff0c;我列出了一些快速简单的方法来帮助你…

YoLo V3 SPP u模型的讲解与总结

一。mosaic图像增强 其实就是将多张图片给汇总到一起&#xff0c;在源码当中就是默认使用4张图片进行拼接&#xff0c;进行预测。 优点&#xff1a; 增加数据的多样性增加目标个数BN能一次性统计多张图片的参数&#xff08;变相的增加了&#xff0c;输入一张图片其实就已经包…

Java agent 使用详解

一、前言 于一个即将上线的应用来说&#xff0c;系统监控是必不可少的&#xff0c;为什么需要监控呢&#xff1f;应用是跑在服务器上的&#xff0c;应用在运行过程中会发生各自意想不到的问题&#xff0c;像大家熟知的OOM&#xff0c;mysql故障&#xff0c;服务器宕机&#xff…

Mac docker-desktop 安装单机版k8s

文章目录01 引言02 下载安装docker desktop03 安装k8s04 安装k8s控制台&#xff08;k8s dashboard&#xff09;05 更方遍的方式安装dashboard01 引言 本文主要讲解在Mac下使用docker-desktop来安装k8s。 02 下载安装docker desktop 下载地址&#xff1a;https://www.docker.…

实例方法定义语法(四)

那么什么是方法呢&#xff1f; Java方法是语句的集合&#xff0c;它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建&#xff0c;在其他地方被引用 1.方法的定义 类的方法定义类的某种行为或者功能。 方法定义的语法…

Allegro如何设置丝印位号优先显示操作指导

Allegro如何设置丝印位号优先显示操作指导 Allegro支持让丝印位号优先显示,可以让视图更加的清晰明了,按照需要的方式显示,具体操作如下 以下图为例 丝印位号被器件的外形盖住了,需要显示的效果为,优先显示丝印位号,器件外形次优先 选择display-layer Priority 出现Di…

MySQL日志系统

MySQL相关文章 慢sql搜集分析工具搭建 前言 日志系统可谓是MySQL中的重中之重&#xff0c;一些MySQL的特性也通过依赖于日志实现的。 本篇文章过一遍日志相关的东西&#xff0c;方便日后复习。 binlog 概念 二进制日志文件&#xff0c;记录了所有的DDL&#xff08;数据库…

tensorflow.keras常用模块介绍

目录前言一、基础层1-0、Input层1-1、Dense层1-2、Activation层&#xff08;激活层&#xff09;、Dropout层1-3、Lambda层1-4、Flatten层二、嵌入层2-1、Embedding层三、池化层3-1、MaxPooling1D层3-2、MaxPooling2D层3-3、AveragePooling1D层3-4、AveragePooling2D层3-5、Glob…

Android 组件化架构设计从原理到实战

为什么需要组件化 小项目是不需要组件化的。当一个项目有数十个人开发&#xff0c;编译项目要花费10分钟&#xff0c;修改一个bug就可能会影响到其他业务&#xff0c;小小的改动就需要进行回归测试&#xff0c;如果是这种项目&#xff0c;那么我们需要进行组件化了 组件化和模…

有效的渗透测试才能确保Web应用安全

应用程序的安全性和快速交付之间存在矛盾&#xff0c;但由于应用程序代码缺陷和安全漏洞&#xff0c;我们正在目睹或经历越来越多的攻击。据调查&#xff0c;软件安全漏洞占了大约47%的安全事故。 与任何软件一样&#xff0c;Web应用程序也包含缺陷和错误。这种安全风险的一个…

[附源码]Python计算机毕业设计Django物品捎带系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

SAP PS 第9节 合并采购申请、组合WBS之详解

SAP PS 第9节 合并采购申请、组合WBS之影响1 合并采购申请1.1 合并采购申请后台配置1.2 合并采购申请效果如下2 组合WBS2.1 后台配置2.1.1 激活需要分组的MRP组2.1.2 项目必须为有库存模式&#xff0c;无论估价或者未估价都可以2.1.3 物料必须允许项目库存&#xff08;允许独立…

Azkaban登录分析

分析意义:目前azkaban采用的是azkaban-users.xml配置文件的方式,配置登录用户。如果公司需要二次开发,增加安全性和便捷性,想从数据库取值呢,该如何着手开发呢?本文分析登录过程,便于进行azkaban的二次登录开发。 1、登录请求地址,请求方式和参数 请求地址:http://x…

mysql创建子账户

1.首先登陆root账户 [roothecs-219255 ~]# mysql -uroot -p首先在Xshell客户端登陆linux&#xff0c;然后输入mysql命令进行登陆。 2.创建子账户 创建一个用户名为test1&#xff0c;密码为123456的子账号&#xff0c;有两种方法&#xff0c;分别为&#xff1a; CREATE USER …