机器视觉HALCON:2.HALCON的预备环境和数据结构

news2024/10/7 5:09:15

目录

  • 下载
  • 基础语法
  • HALCON的数据结构
    • 图像和数据类型
    • 区域的存储
      • 区域的存储
      • 连通区域
    • 亚像素轮廓(XLD)
      • 亚像素轮廓介绍
      • 亚像素轮廓数据结构
    • 数组
      • 数组的赋值与创建
      • 数组的存储与读取
    • 字典
      • 字典介绍
      • 字典的创建和操作
    • 句柄

下载

HALCON的官方网站

下载时需要注册登录

或者使用百度云盘下载
链接:
链接
提取码:1ob7

下载好后点击安装程序,一路默认设置向下安装。
最后找到halcon的证书放到对应的文件夹下,证书搜一下就有了

基础语法

就是for语句,if语句这些,不做教程。有编程基础后面写出来看一眼就知道了。

HALCON的数据结构

图像和数据类型

在这里插入图片描述
每一个放个有一个数值,这个数值包括像素点的x,y坐标,灰度值三个信息。8位图像数值取值范围为0-255
数据类型:
请添加图片描述
不常见的数据类型解释:
complex:混合型数据类型,包含实部和虚部两部分,存储复数
cyclic:循环方式存储数据,比如8位,超过了255,就会从0开始循环
direction:存储一个方向
real:浮点数据类型

区域的存储

图像处理的任务就是识别图像中的某些特征区域(Region),计算区域特征的时候,会把图像的像素转化为区域计算。可以减少资源占用,方便存储计算。

区域的存储

区域在内存中都是逐行存储的,所以一般使用行程编码来实现区域的存储。
行程编码和之前所说的图像压缩类似,就是把相同的数据用数字来代替。
例如:QQQWWWERR可以写成Q3W3ER2。
行程编码的数据包含该行程的纵坐标,行程开始和行程结束对应的横坐标为一个区域的行程编码。
请添加图片描述
请添加图片描述

连通区域

1.四连通区域
上、下、左、右四个相邻的像素区域(共五个,相邻四个),把像素的这五个区域合并到一个像素上
2.八链条区域
与像素相邻一圈的像素合并到一起

如,可分为5个区域:
请添加图片描述

亚像素轮廓(XLD)

亚像素轮廓介绍

图像和区域最小的组成单位是像素,对于测量工具,例如钢尺,最小的测量单位是毫米,但是可以通过估读的方式读到亚毫米级,如2.5毫米。像素也是可以“估读”的,这就是所说的亚像素级。
HALCON中使用XLD这个数据结构来存储和表示亚像素的数据。

亚像素轮廓示意图,每一个方格代表一像素,方格代表轮廓像素,线代表亚像素轮廓,可以看到亚像素轮廓在像素内,但是并不是在中心,而且根据计算存在不同的点位。
亚像素轮廓示意图请添加图片描述

亚像素轮廓数据结构

有两种不同的亚像素轮廓:
1.插值计算亚像素轮廓
2.通过多边形逼近方式得到的亚像素轮廓
亚像素轮廓(XLD轮廓)的数据结构如下:

typedef struct con_type
{
	HITEMCNT num;						//XLD轮廓点的数量
	HSUBCOOK * row;						//XLD轮廓点的行坐标
	HSUBCOOK * column;					//XLD轮廓点的列坐标
	
	Hcont_class location;				//XLD是否交叉和交叉的位置
	INT4 num_attrib;					//附加属性的个数
	Hcont_attrib * attribs				//XLD轮廓附加属性
	INT4 num_global;					//XLD轮廓附加全局属性个数
	Hcont_global_attrib * attrib;		//XLD轮廓附加全局属性
	INT4 h;								//辅助属性
}Hcont;

数组

有人认为HALCON的数组(Tuple)和C语言的数组是相同的,其实两者有所差别。C语言的数组只能存放一种变量,而且数组可以是二维的或三维的,而HALCON的数组就不太一样了。在数据存储方面,可以认为Tuple是一个结构体,可以同时存储多种数据类型,如字符串、整数和浮点数;在维度方面,Tuple是一个单一维度的数组,它只能是一维数组,而不像C语言中的数组那样进行多维度存储。

数组的赋值与创建

Tuple := [] //空数组
Tuple := [1,‘2’,2.1] //赋值创建数组
Tuple[1] = 0 //给指定的数组赋值
Number := |Tuple| //获取数组的长度
tuple_length(Tuple, Length2) //用函数的方法获取数组长度,放到Length2

数组的存储与读取

可以通过write_tuple这个函数来存储Tuple数值

* 创建一个包含不同数据类型的元组
Tuple := [42, 3.14, 'Hello, HALCON!']

* 定义文件名
FileName := 'tuple_data.tup'

* 将元组写入文件
write_tuple(Tuple, FileName)

字典

字典介绍

在HALCON中,字典(dictionary)是一种用于存储键值对(key-value pair)的数据结构。字典允许用户以键值对的形式组织数据,其中每个键(key)是唯一的,并且与一个值(value)相关联。字典在许多编程场景中都非常有用,特别是在需要高效地存储和检索数据时。

字典的创建和操作

创建:

create_dict (DictHandle) //DictHandle 是字典的句柄,用于引用这个字典。

向字典添加键值对
使用 set_dict_tuple或set_dict_object,可以向字典添加键值对:

set_dict_tuple (DictHandle, Key, Value)

要从字典中获取值,可以使用 get_dict_tuple 或者get_dict_object:

get_dict_tuple (DictHandle, Key, Value)
get_dict_param (DictHandle, 'keys', Keys)//获取所有的建Keys返回一个数组

可以使用 remove_dict_key 等来删除字典中的键值对:

 remove_dict_key (DictHandle, Key)//清除指定键值对
 clear_dicts (DictHandle)//清除DictHandle字典所有键值对
 clear_all_dicts ()//清除所有字典所有键值对

copy_dict来赋值字典

DictHandle为要复制的字典句柄

GenParamName为错误种类,目前只有复制空句柄错误,所以使用[]默认就可以

GenParamValue 异常处理方法,true是复制空句柄时中断,low_level是复制继续,错误结果交给system_set定。false是不触发错误继续复制
CopiedDictHandle为复制结果存放句柄

copy_dict( : : DictHandle, GenParamName, GenParamValue : CopiedDictHandle)//此为官方表示方式,: 用于分隔输入和输出参数。: :表示没有显示输入参数,但是由内部输入参数
copy_dict( DictHandle, [], [true], CopiedDictHandle)

句柄

句柄是唯一一个整数值,一般为x位机器,x/8字节大小。有点类似与指针,但是不同的是,指针包含的是引用对象的内存地址,而句柄则是系统所管理的引用标识(映射表)
在Halcon中句柄由数字和字母组成,如:H24BE08FA10。每一次打开相同的程序,相同的对象的句柄也是不一样的

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

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

相关文章

react antd中transfer穿梭框组件中清除搜索框内容

如图:需要清除search搜索框内容 antd的transfer穿梭框组件未提供入口修改input框的值。 2种方法修改。 1、直接操作dom元素设置值(不推荐) useEffect(() > {const searchInput document.querySelector(.ant-transfer-list-search input)…

Redis常用命令——String篇

前面我们讲解了一些 Redis 的全局命令(Redis常用基本全局命令)。所谓全局命令,就是可以匹配任意一个数据结构进行使用。但是不同的数据结构,也有自己的操作命令。本篇文章主要讲解的是 String 的操作命令,希望会对你有…

2024电工杯B题:大学生平衡膳食食谱的优化设计及评价

大学时代是学知识长身体的重要阶段,同时也是良好饮食习惯形成的重要时期。这一特 定年龄段的年轻人,不仅身体发育需要有充足的能量和各种营养素,而且繁重的脑力劳动和 较大量的体育锻炼也需要消耗大量的能源物质。大学生中饮食结构不合理以及…

在抖音怎么开店?抖音小店开店步骤详解!建议收藏!

大家好,我是电商小V 想在抖音上面开一家属于自己的抖音店铺去卖点商品赚取个商品的差价,那么开通抖音小店的步骤是什么呢?主要分为几步呢?关于这个问题咱们就来详细的说一下: 开店之前的准备工作,首先需要准…

核心四:线程的一生

4、核心四:线程的一生💟 4.1 New 已创建但还未启动的新线程。 我们new Thread之后,线程已经实现了一些准备工作。但没有运行run方法,因为没有使用start来开启线程。此时,线程处于New状态。 4.2 Runnable&#xff08…

Python模块、包和异常处理

大家好,在当今软件开发领域,Python作为一种简洁、易读且功能强大的编程语言,被广泛应用于各种领域。作为一名测试开发工程师,熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…

Linux —— 信号量

Linux —— 信号量 什么是信号量P操作(Wait操作)V操作(Signal操作)信号量的类型 一些接口POSIX 信号量接口:其他相关命令: 基于循环队列的生产者和消费者模型同步关系 多生产多消费 我们今天接着来学习信号…

5.22R语言初步学习-1

今天上课讲R语言,要干什么没讲,分析什么,目的是什么没讲。助教基本上就是让我们打开窗口,按要求抄代码指令,代码原理也没讲......再加上最近正好在学概率论与数理统计,肯定是有用的,所以还是学习…

(全面)Nginx格式化插件,Nginx生产工具,Nginx常用命令

目录 🎫 前言 🎉 开篇福利 🎁 开篇福利 x2 Double happiness # 介绍 # 地址 # 下载 💻 命令及解析 # 整个文件系统中搜索名为nginx.conf的文件 # 编辑nginx.conf文件 # 重新加载配置文件 # 快速查找nginx.conf文件并使…

HTTP协议请求报头(header)

目录 目录 User-Agent与Referer User-Agent Referer Cookie HTTP报头(header)的结构是“键值对”结构,每个键值对占一行,键和值之间使用分号分隔。 报头的种类有很多,本次介绍几个重要的。 Host:表示请…

中电金信:从系统升级入手 看这些银行如何激活信贷业务

近期,我国金融机构围绕科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章,持续优化信贷结构,不断增强金融服务实体经济作用。金融业认真落实国家经济发展目标,不断优化资金投向结构,持续加大重大战略、重点…

robosuite导入自定义机器人

目录 目的:案例一:成果展示具体步骤:URDF文件准备xml文件生成xml修改机器人构建 目的: 实现其他标准/非标准机器人的构建 案例一: 成果展示 添加机器人JAKA ZU 7 这个模型 具体步骤: URDF文件准备 从…

解决小皮面版搭建php网站数据库连接不了

首先进入mysql bin目录下 并执行cmd mysql -u root -pCREATE USER userlocalhost IDENTIFIED BY pass;GRANT ALL PRIVILEGES ON *.* TO userlocalhost;GRANT SELECT, INSERT, UPDATE ON database_name.* TO xxwlocalhost;FLUSH PRIVILEGES;select host ,user from mysql.user…

数据防泄漏系统哪个好用,给文件加密的软件

数据防泄露(Data Leakage Prevention,DLP)是指通过一定的技术手段,防止组织指定(重要或敏感的)数据或信息资产以违反安全策略规定的形式流出组织的一种策略。 信息防泄露以文档加密技术为核心,…

urllib_post请求_百度翻译

打开百度翻译,并打开控制台,输入spider,然后在网络中找到对应的接口,可以看出,该url是post请求 在此案例中找到的接口为sug,依据为: 可以看到,传递的数据为kw : XXX, 所…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

内脏油脂是什么?如何减掉?

真想减的人,减胖是很容易的,但想要形体美又健康,还是得从减内脏油脂开始,那么,问题来了,什么是内脏油脂? 油脂它分部于身体的各个角落,四肢、腹部、腰、臀部、脸、脖子...等&#xf…

Nginx实现负载均衡与故障检查自动切换

创作灵感来源于个人项目的一个稳定性规划,单节点的项目稳定性方面可能有很大的缺漏,因此需要升级为多节点,保证服务故障后,依然有其他服务可用,不会给前端用户造成影响。 (前面讲选型,想直接看…

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?下面跟随美迅物联网MesoonRF从多个维度来了解。   概述:低功耗蓝牙采用了高斯频移键控(GFSK)。这里我们先抛开蓝牙的协议,单纯从Radio的角度看收发通信,Ra…