目录
- 下载
- 基础语法
- 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。每一次打开相同的程序,相同的对象的句柄也是不一样的。