机器视觉--Halcon变量的创建与赋值

news2025/2/21 0:44:50

一、引言

在机器视觉领域,Halcon 作为一款强大且功能丰富的软件库,为开发者提供了广泛的工具和算子来处理各种复杂的视觉任务。而变量作为程序中存储和操作数据的基本单元,在 Halcon 编程中起着至关重要的作用。正确地创建和赋值变量是编写高效、准确的 Halcon 程序的基础。本文将深入探讨 Halcon 中不同类型变量的创建与赋值方法.

二、Halcon 变量类型概述

Halcon 支持多种类型的变量,每种类型都有其特定的用途和存储方式。以下是一些常见的变量类型:

  1. 图像变量(Image):用于存储图像数据,是 Halcon 中处理视觉信息的核心。图像可以从各种来源获取,如相机、图像文件等。
  2. 区域变量(Region):表示图像中的特定区域,可以是由轮廓、形状等定义的区域。区域变量在图像分析、目标检测等任务中经常使用。
  3. XLD 轮廓变量(XLD Contours):用于存储图像中的边缘轮廓信息,提供了更精确的轮廓表示,常用于特征提取和形状分析。
  4. 数值变量(Number):包括整数、浮点数等,用于存储数值型数据,如坐标值、参数值、计数器等。
  5. 字符串变量(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。这些数值变量可以在后续的计算和逻辑判断中使用。

运行结:

七、字符串变量的创建与赋值

字符串变量同样通过赋值语句创建和赋值。例如:

上述代码创建了三个字符串变量 filenamepath 和 label,分别赋值为文件名、文件路径和一个标签文本。字符串变量常用于处理文件操作、显示信息等场景。

运行结果:

八、总结

通过本文对 Halcon 中不同类型变量的创建与赋值的详细介绍和丰富的程序演示,我们深入了解了图像变量、区域变量、XLD 轮廓变量、数值变量和字符串变量的操作方法。掌握这些变量的使用是进行 Halcon 机器视觉编程的基础,希望读者能够通过实践进一步巩固所学知识,并在实际项目中灵活运用这些变量来实现各种复杂的视觉任务。在后续的学习中,我们还将探索更多关于 Halcon 算子的组合应用和高级编程技巧。

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

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

相关文章

03【FreeRTO队列-如何获取任务信息与队列的动静态创建】

一.利用 vTaskList()以及 vTaskGetRunTimeStats()来获取任务的信息 1.现象与开启启用宏 freeRTOSConfig.h //必须启用 #define configUSE_TRACE_FACILITY 1 #define configGENERATE_RUN_TIME_STATS 1 #define configUSE_STATS_FORMATTING_FUNCTIONS…

GBD研究——美国州级地图(附资源)

美国州级别地图 地图源很多,随便下载。不过我试了两个资源,发现有的资源会漏掉阿拉斯加和夏威夷。 就剩大的这块佩奇 出现这样的问题,要么跟数据源有关,要么就是要掉地名来看,是不是没匹配上。 亲自试过&#xff0c…

【微服务学习一】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 修改版…

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…

3D打印技术:如何让古老文物重获新生?

如何让古老文物在现代社会中焕发新生是一个重要议题。传统文物保护方法虽然在一定程度上能够延缓文物的损坏,但在文物修复、展示和传播方面仍存在诸多局限。科技发展进步,3D打印技术为古老文物的保护和传承提供了全新的解决方案。我们来探讨3D打印技术如…

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…

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…

深入HBase——引入

引入 前面我们通过深入HDFS到深入MapReduce &#xff0c;从设计和落地&#xff0c;去深入了解了大数据最底层的基石——存储与计算是如何实现的。 这个专栏则开始来看大数据的三驾马车中最后一个。 通过前面我们对于GFS和MapReduce论文实现的了解&#xff0c;我们知道GFS在数…

2025年02月12日Github流行趋势

项目名称&#xff1a;data-formulator 项目地址url&#xff1a;https://github.com/microsoft/data-formulator 项目语言&#xff1a;TypeScript 历史star数&#xff1a;4427 今日star数&#xff1a;729 项目维护者&#xff1a;danmarshall, Chenglong-MS, apps/dependabot, mi…

【落羽的落羽 数据结构篇】双向链表

文章目录 一、链表的分类二、双向链表1. 结构2. 申请一个新节点3. 尾部插入数据4. 头部插入数据5. 尾部删除数据6. 头部删除数据7. 在指定位置之后插入数据8. 删除指定位置节点9. 销毁链表 一、链表的分类 链表的分类实际上要从这三个方向分析&#xff1a;是否带头、单向还是双…

Golang的并发编程问题解决思路

Golang的并发编程问题解决思路 一、并发编程基础 并发与并行 在计算机领域&#xff0c;“并发”和“并行”经常被混为一谈&#xff0c;但它们有着不同的含义。并发是指一段时间内执行多个任务&#xff0c;而并行是指同时执行多个任务。在 Golang 中&#xff0c;通过 goroutines…

剑指offer第2版:搜索算法(二分/DFS/BFS)

查找本质就是排除的过程&#xff0c;不外乎顺序查找、二分查找、哈希查找、二叉排序树查找、DFS/BFS查找 一、p39-JZ3 找出数组中重复的数字&#xff08;利用特性&#xff09; 数组中重复的数字_牛客题霸_牛客网 方法1&#xff1a;全部排序再进行逐个扫描找重复。 时间复杂…