文章首发于我的 github 仓库-cv算法工程师成长之路,欢迎关注我的公众号-嵌入式视觉。
本人水平有限,文章如有问题,欢迎及时指出。如果看完文章有所收获,一定要先点赞后收藏。毕竟,赠人玫瑰,手有余香。
工业智慧视觉应用主要涉及四个场景:识别、测量、定位、检测。

HALCON 是德国 MVtec 公司开发的一款综合性的机器视觉标准软件,拥有全球通用的集成开发环境(HDevelop)。它节约了产品成本,缩短了软件开发周期——HALCON 灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的机器视觉(Machine Vision)软件。
MVTec 提供了 5 种软件:HALCON、MERLIC、深度学习工具、接口、嵌入式视觉,其中 HALCON 是最核心和应用最广的。
HALCON 主要提供的技术有:条形码和二维码读取、BLOB 分析、物图像分类、计算光学成像、过滤技术、缺陷检查、匹配、1D/2D/3D 测量、形态学处理、OCR 和 OCV、基于样本的识别(SBI)、亚像素边缘检测和线条提取技术、深度学习和 3D 视觉技术。
所谓 Blob 分析,即是从连通像素中提取具有相同逻辑状态的特征 (Blob)。
更多技术的描述请参阅官网资料。

注意:HALCON 目前不支持 arm 处理器版的 M1 Pro 机器,而且目前主流是在 Windows 开发居多。
注意,需要先在官网注册账号,然后才能下载对应软件,MVTec HALCON 提供两个不同的软件版本:HALCON 订阅版 (HALCON Progress) 和 HALCON 永久版 (HALCON Steady)。两个版本是完全独立的。 需要许可证,这意味着没有可能从一个版本 "切换" 到另一个版本。
HALCON 下载安装步骤如下所示:
license 文件,跳过即可。



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

HALCON 提供了通用的图像采集接口来支持不同的图像采集设备(3D相机、相机等),包好特定设备的实现库会在程序运行时动态加载。
Operators。
我们使用 HALCON 库中任何功能实际上都是通过算子(Operators)完成的,每个功能都有多种实现方法,其可以通过算子参数选择。完整的算子列表在 HALCON Operator Reference,其提供了 HDevelop, .NET, Python, C++, 和 C syntax 接口。HALCON库提供的算子的重要特征如下:
iconic)、输出图标、输入控制和输出控制。Quick Guide to HALCON Parameters and Data Structures
HALCON 算子的参数有两种基本类型:图标数据和控制数据(iconic data and control data)。图像、区域(regions)和 XLD(拓展线描述) 属于标志性数据。
edges_sub_pix 这样的亚像素精度算子将轮廓作为 XLD 数据返回。 轮廓是一系列 2D 控制点,由线连接。 通常,控制点之间的距离约为 1 个像素。 除了控制点之外,XLD 对象还包含所谓的局部和全局属性。 这些的典型示例是,例如,控制点的边缘幅度或轮廓段的回归参数。 除了提取 XLD 对象外,HALCON 还支持进一步处理。 这方面的示例是基于给定特征范围的轮廓选择,用于将轮廓分割成线、弧、多边形或平行线。控制数据(control data)包括句柄和基本数据类型,如整数、实数、字符串。
句柄是对复杂数据结构的引用,例如,与图像采集接口或基于形状匹配的模型的连接。 出于效率和数据安全的原因,在操作符之间传递的不是整个结构而是只有句柄。 句柄是不能更改的神奇值(magic values),并且可能因执行和版本而异。 一旦所有引用被覆盖,它们就会自动清除。 使用句柄的示例有图形窗口、文件、套接字、图像采集接口、OCR、OCV、测量和匹配。
为了支持特殊硬件或实现新的算法,HALCON 支持以 C 语言实现的自定义算子。拓展包接口包含几个预定义的例程和宏,用于在 C 中轻松处理图像数据和内存对象。成功集成新算子后,它可以像任何其他 HALCON 算子一样使用。
HALCON 支持Python、C、C++ 和 .NET 语言接口,对于·不同编程语言接口,其数据类型、类和算子的命名会有所不同。
读取图像并计算连接区域(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}')
C 接口是 HALCON 支持的最简单的接口,每个算子由 1 或 2 个全局函数表示,其中算子的名称和参数序列和 HDevelop 语言相同。
因为 HALCON 算子的本身就是由 C 语言实现的,所以 C 是原生接口,支持也是最好。
以下示例代码也是实现读取图像并计算连接区域(connected regions)数量。
Hobject img;
read_image(&img, "pcb");
Hobject region;
threshold(img, ®ion, 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);
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';
略
HALCON 通过动态库(Windows: 动态加载库 DLLs, Linux: 共享库 shared libraries)的形式为 50 多个图像采集卡和数百个工业相机提供采集图像的接口。库名称以前缀 hAcq 开头;HALCON XL 使用以 xl 结尾的库。
HALCON 图像采集接口的更新会比 HALCON 库本身更新更为频繁。
成功安装好图像采集设备后,通过 open_framegrabber 算子(需配置设备的名称和其他信息)访问设备,通过 grab_image 算子获取图像。
HALCON 对不同 I/O 设备使用同一类算子实现统一访问。安装好 I/O 设备后,使用 open_io_device 算子建立连接,指定 I/O 设备接口的名称;建立连接后,通过调用 open_io_channel 来打开传输通道,然后使用 read_io_channel 和 write_io_channel 算子读取和写入值。
官方推荐使用 HDevelop(HALCON 机器视觉库的交互式开发环境) 进行快速原型设计。在开发好 HDevelop 程序后需要将其转换为最终环境,方法有以下三种:
scratch)开始编写程序意味着手动将 HDevelop 代码翻译成目标编程语言(C++、Python...)。CMake 文件。 HDevelop 的库导出使用 HDevEngine,一个充当解释器的库。默认情况下,HDevelop 窗口入下图 3.1 所示,窗口主要分为 3 类:
iconic variables)和控制变量。图标变量包含图标数据,控制变量包含控制数据。
推荐观看视频教程: 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(快速指南) | 下载 PDF | 2.6 MB |
| Installation Guide(安装指南) | 下载 PDF | 0.4 MB |
| HDevelop Users' Guide(HDevelop 用户指南) | 下载 PDF | 6.2 MB |
| Solution Guide I - Basics(解决方案指南 I - 基础知识) | 下载 PDF | 6.7 MB |
| Solution Guide II - A - Image Acquisition(解决方案指南 II-B - 图像采集) | 下载 PDF | 0.7 MB |
| Solution Guide II - B - Matching(解决方案指南 II-B - 匹配) | 下载 PDF | 3.4 MB |
| Solution Guide II - C - 2D Data Codes(解决方案指南 II-C - 二维码) | 下载 PDF | 4.6 MB |
| Solution Guide II - D - Classification(解决方案指南 II-D - 分类) | 下载 PDF | 4.3 MB |
| Solution Guide III - A - 1D Measuring(解决方案指南 III-A - 1D 测量) | 下载 PDF | 1.2 MB |
| Solution Guide III - B - 2D Measuring(解决方案指南 III-B - 2D 测量) | 下载 PDF | 2.5 MB |
| Solution Guide III - C - 3D Vision(解决方案指南 III-C - 3D 视觉) | 下载 PDF | 14.2 MB |
| Technical Updates(技术更新) | 下载 PDF | 0.2 MB |
本文由博客一文多发平台 OpenWrite 发布!
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
有没有办法快速将表格格式的ruby哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑