机器视觉--Halcon变量的创建与赋值
一、引言
在机器视觉领域,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 算子的组合应用和高级编程技巧。
相关文章:
机器视觉--Halcon变量的创建与赋值
一、引言 在机器视觉领域,Halcon 作为一款强大且功能丰富的软件库,为开发者提供了广泛的工具和算子来处理各种复杂的视觉任务。而变量作为程序中存储和操作数据的基本单元,在 Halcon 编程中起着至关重要的作用。正确地创建和赋值变量是编写高…...
ES常用查询
根据编号查询 GET custom/_search { "query": { "term": { "no": "abc" } } } 查询指定的列 GET custom/_search { "_source": ["id", "no"], "size": 10000, …...
数据库与表的基本操作
创建订货管理系统数据库。数据库名称为Ordering,其数据文件的逻辑名称为Ordering_Data,存放在C盘的Order文件夹下;日志文件的逻辑名称为Ordering_Log,存放在C盘的Order文件夹下。数据库中包含数据表,分别为数据表C&…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter12-BOM
十二、BOM 虽然 ECMAScript 把浏览器对象模型(BOM,Browser Object Model)描述为 JavaScript 的核心,但实际上 BOM 是使用 JavaScript 开发 Web 应用程序的核心。BOM 提供了与网页无关的浏览器功能对象。 HTML5 规范中有一部分涵盖…...
03【FreeRTO队列-如何获取任务信息与队列的动静态创建】
一.利用 vTaskList()以及 vTaskGetRunTimeStats()来获取任务的信息 1.现象与开启启用宏 freeRTOSConfig.h //必须启用 #define configUSE_TRACE_FACILITY 1 #define configGENERATE_RUN_TIME_STATS 1 #define configUSE_STATS_FORMATTING_FUNCTIONS…...
GBD研究——美国州级地图(附资源)
美国州级别地图 地图源很多,随便下载。不过我试了两个资源,发现有的资源会漏掉阿拉斯加和夏威夷。 就剩大的这块佩奇 出现这样的问题,要么跟数据源有关,要么就是要掉地名来看,是不是没匹配上。 亲自试过,…...
【微服务学习一】springboot微服务项目构建以及nacos服务注册
参考链接 3. SpringCloud - 快速通关 springboot微服务项目构建 教程中使用的springboot版本是3.x,因此需要使用jdk17,并且idea也需要高版本,我这里使用的是IDEA2024。 环境准备好后我们就可以创建springboot项目,最外层的项目…...
第39周:猫狗识别 2(Tensorflow实战第九周)
目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…...
【Elasticsearch源码解读】代码包结构概述
Elasticsearch的代码库包含多个包,每个包负责不同的功能。以下是这些包的主要功能: #### action 封装了Elasticsearch的各种操作,如索引、搜索、删除等,提供了与集群交互的接口。 #### bootstrap 包含启动Elasticsearch节点所…...
DeepSeek 概述与本地化部署【详细流程】
目录 一、引言 1.1 背景介绍 1.2 本地化部署的优势 二、deepseek概述 2.1 功能特点 2.2 核心优势 三、本地部署流程 3.1 版本选择 3.2 部署过程 3.2.1 下载Ollama 3.2.2 安装Ollama 3.2.3 选择 r1 模型 3.2.4 选择版本 3.2.5 本地运行deepseek模型 3.3.6 查看…...
jenkins war Windows安装
Windows安装Jenkins 需求1.下载jenkins.war2.编写快速运行脚本3.启动Jenkins4.Jenkins使用 需求 1.支持在Windows下便捷运行Jenkins; 2.支持自定义启动参数; 3.有快速运行的脚步样板。 1.下载jenkins.war Jenkins下载地址:https://get.j…...
【NLP251】命名实体识别常用模块(基于Transformer分类)
1. 从JSON格式的数据中加载并预处理样本供Ner任务训练和推理使用 class JsonNerDataset(Dataset):"""定义一个加载json格式原始命名实体识别格式数据的Dataset一行一条样本(json字符串),包含: originalText、entities"""def __init_…...
3D打印技术:如何让古老文物重获新生?
如何让古老文物在现代社会中焕发新生是一个重要议题。传统文物保护方法虽然在一定程度上能够延缓文物的损坏,但在文物修复、展示和传播方面仍存在诸多局限。科技发展进步,3D打印技术为古老文物的保护和传承提供了全新的解决方案。我们来探讨3D打印技术如…...
基于python sanic框架,使用Nacos进行微服务管理
微服务软件系统构建方式,已经很普及了,通过开源的sanic进行微服务管理,便捷,技术也比较成熟,而在项目实际应用过程中,微服务类型不仅有java的,还有nodejs、python等,尤其是结合算法模型构建的python接口,需要在Nacos进行注册管理。本文内容耗时2天踏坑,亲测一切ok。 …...
Vue h函数到底是个啥?
h 到底是个啥? 对于了解或学习Vue高阶组件(HOC)的同学来说,h() 函数无疑是一个经常遇到的概念。 那么,这个h() 函数究竟如何使用呢,又在什么场景下适合使用呢? 一、h 是什么 看到这个函数你可…...
深入浅出 Python Logging:从基础到进阶日志管理
在 Python 开发过程中,日志(Logging)是不可或缺的调试和监控工具。合理的日志管理不仅能帮助开发者快速定位问题,还能提供丰富的数据支持,让应用更具可观测性。本文将带你全面了解 Python logging 模块,涵盖…...
Android WindowContainer窗口结构
Android窗口是根据显示屏幕来管理,每个显示屏幕的窗口层级分为37层,0-36层。每层可以放置多个窗口,上层窗口覆盖下面的。 要理解窗口的结构,需要学习下WindowContainer、RootWindowContainer、DisplayContent、TaskDisplayArea、T…...
创建一个新的 React Native 项目
之前一直使用 npx react-native init my_app 来创建 RN 项目, 但是新版本会报错: Need to install the following packages: react-native0.77.0 Ok to proceed? (y) y npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: unde…...
Linux vmstat 命令
作用 性能监控工具。 示例 vmstat 2 5:每 2 秒执行 1 次,共执行 5 次。 下列示例中加了 -w 80 参数增加显示长度,目的是对齐字段值,Ctrl C 可停止输出。 [rootlocalhost ~]# vmstat 2 -w 80 procs -----------------------me…...
2025年最新版1688平台图片搜索接口技术指南及Python实现
随着电商行业的蓬勃发展,1688作为国内领先的B2B交易平台,其商品搜索功能对于买家和卖家而言都至关重要。图片搜索作为其中的一种高级搜索方式,能够极大地提升用户的搜索体验和准确性。本文将详细介绍如何通过API接口实现1688平台的图片搜索功…...
基于A*算法与贝塞尔曲线的路径规划与可视化:从栅格地图到平滑路径生成
引言 在机器人导航、自动驾驶和游戏开发等领域,路径规划是一个核心问题。如何高效地找到从起点到终点的最优路径,并且确保路径的平滑性和安全性,是许多应用场景中的关键挑战。本文将介绍一种结合A算法和贝塞尔曲线的路径规划方法,并通过Pygame实现可视化。我们将从栅格地图…...
使用verilog 实现 cordic 算法 ----- 旋转模式
1-设计流程 ● 了解cordic 算法原理,公式,模式,伸缩因子,旋转方向等,推荐以下链接视频了解 cordic 算法。哔哩哔哩-cordic算法原理讲解 ● 用matlab 或者 c 实现一遍算法 ● 在FPGA中用 verilog 实现,注意…...
【css】width:100%;padding:20px;造成超出100%宽度的解决办法 - box-sizing的使用方法 - CSS布局
问题 修改效果 解决方法 .xx {width: 100%;padding: 0 20px;box-sizing: border-box; } 默认box-sizing: content-box下, width 内容的宽度 height 内容的高度 宽度和高度的计算值都不包含内容的边框(border)和内边距(padding&…...
贪心算法_翻硬币
蓝桥账户中心 依次遍历 不符合条件就反转 题目要干嘛 你就干嘛 #include <bits/stdc.h>#define endl \n using namespace std;int main() {ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; cin >> s;string t; cin >> t;int ret 0;for ( i…...
vue开发06:前端通过webpack配置代理处理跨域问题
1.定义 在浏览器尝试请求不同源(域名、协议、端口号不同)的资源时,浏览器的同源策略会阻止这种跨域请求。(比如前端端口15500,后端端口5050,前端界面不可以直接调用5050端口) 2.解决方案 使用前…...
深入HBase——引入
引入 前面我们通过深入HDFS到深入MapReduce ,从设计和落地,去深入了解了大数据最底层的基石——存储与计算是如何实现的。 这个专栏则开始来看大数据的三驾马车中最后一个。 通过前面我们对于GFS和MapReduce论文实现的了解,我们知道GFS在数…...
2025年02月12日Github流行趋势
项目名称:data-formulator 项目地址url:https://github.com/microsoft/data-formulator 项目语言:TypeScript 历史star数:4427 今日star数:729 项目维护者:danmarshall, Chenglong-MS, apps/dependabot, mi…...
【落羽的落羽 数据结构篇】双向链表
文章目录 一、链表的分类二、双向链表1. 结构2. 申请一个新节点3. 尾部插入数据4. 头部插入数据5. 尾部删除数据6. 头部删除数据7. 在指定位置之后插入数据8. 删除指定位置节点9. 销毁链表 一、链表的分类 链表的分类实际上要从这三个方向分析:是否带头、单向还是双…...
Golang的并发编程问题解决思路
Golang的并发编程问题解决思路 一、并发编程基础 并发与并行 在计算机领域,“并发”和“并行”经常被混为一谈,但它们有着不同的含义。并发是指一段时间内执行多个任务,而并行是指同时执行多个任务。在 Golang 中,通过 goroutines…...
vsftpd 配置项说明
目录 一:vsftpd 配置文件说明二:vsftpd 服务和连接设置三:vsftpd 用户根目录管理四:vsftpd 匿名用户模式管理五:vsftpd 本地用户模式管理六: vsftpd 虚拟用户模式管理 一:vsftpd 配置文件说明 …...
