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

下载

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。每一次打开相同的程序,相同的对象的句柄也是不一样的

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I Am Rex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值