Halcon基本语法

时间:2024-03-08 20:52:34

Halcon是什么?

Halcon(全称为Halcon Imaging Library)是由德国MVTec Software GmbH开发的一套功能强大的机器视觉软件库。Halcon提供了丰富的图像处理和机器视觉算法,用于解决各种工业和科学领域中的视觉检测、识别和测量等问题。

1、显示图片

halcon 是有自己的语法,也支持C++、C#、Python,halcon保存的文件后缀是.hdev格式

halcon的注释
*是整行注释
// 是代码后面的注释
快捷键F5 运行

代码不需要打印和输出,运行之后结果会显示在变量窗口

* 引入图片
read_image(Image,'C:/Users/Pictures/Pictures/image.jpg')
read_image(Image1,'fabrik')  软件安装目录下的image,不需要写全部路径

* 获取图像大小
get_image_size(Image, Width, Height)

* 打开图像窗口
* WindowHandle:窗口管理者(handle句柄,在某一个进程中的唯一索引)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)

*设置当前填充区域
dev_set_draw('margin')

* 显示图像
dev_display(Image)

在这里插入图片描述

2、基本语法格式

* 语法学习
* 声明变量
* C#语法是 int x = 1
* halcon语法是 x:=1
x:=1
y:='Hello halcon'
i:=1.0

* 分支语句判断 if
if(i=x)
    i:=2.2
endif

* 不等于
if(x#2)
    i:=1.0
endif

* > < 和C#都是一样的
if(i>6)
endif

if(i<6)
endif

* else if 判断
if(i>0)
    i:=2.0
elseif(i<2)
endif

* 逻辑与 &&
if(x>0 and x<3)
    i:=4.0
endif

* 逻辑或 ||
if(x>0 or x<3)
    i:=5.0
endif

* 逻辑非 !=
if(not(x=8))
    i:=8
endif

* 数组
nums:=[1,2,3,4,5]
nums2:=[1,2,3,4.5]
nums3:=[1,2,3,'4.5']

* for循环
for j:=0 to 5 by 1
endfor

* while 循环
a:=1
while(a==1)
    a:=2
endwhile

* switch case 循环
switch(a)
case 1:
    a:=5
    break
case 2:
    a:=6
    break
endswitch

* 元组
nums:=[1,2,3,4,5]
* 元组长度
len := |nums|

* 异常捕获
try
    * nums-1 长度-1
    * nums-1 长度在这里有问题,需要换成 |nums|
    for Index := 0 to |nums| by 1
        a:=nums[Index]
    endfor
catch (Exception)
    *disp_message (3600, Exception, 'window', 12, 12, 'black', 'true')
endtry

* 进制:halcon对进制可以直接转换。
i1 := 123$'#o' //8进制,0代表前缀
i2 := 123$'#x' //16进制,0x为前缀,7b代表赋值
i2 := 123$'#X' //7B为赋值,7b=7B
i3 := 123$'#f' //double类型,默认保留小数点后六位
i4 := 123$'#g' //
i5 := 123$'#G' //
i6 := 123$'#e' //转成科学计数
i7 := 123$'#E' //

* 整数
d1 := 123$'6' // 小于6位文本右对齐,大于6位忽略
d2 := 123456$'6' //

d3 := 123$'-6' // 小于6位文本左对齐,大于6位忽略
d4 := 123456$'-6' //

d5 := 123$'.6' // 小于6位时,文本左补零
d6 := 123$'10.5' // 小于十位时,文本右对齐,小于五位补零
d7:= 12345$'10.5' //
d8:= 1234567891$'10.5' //

* 四舍五入
e := 1.5555
e1 := e$'.0f'
e2 := e$'.1f'
e3 := e$'.2f'
e4 := e$'.3f'

在这里插入图片描述

3、元组(数组)

元组(Tuple)是一种基本的数据结构,用于存储和处理一组有序的元素。元组可以包含不同类型的数据,如整数、实数、字符串等,甚至可以包含其他元组。元组在 HALCON 中被广泛应用于表示和操作图像处理和计算机视觉中的数据。

* 元组
Tuple := [1,0,3,4,5,6,7,8]
* 根据索引来操作元组
Tuple[0] := 2
* 批量操作元组的值
Tuple[1,3,5] := 'abc'

*批量为元组赋值,自动填充0~100的连续值
tuple2:=[0:100]

*批量为元组赋值,从0150的连续值,步长为3
tuple3:=[0:3:150]
* 批量为元组赋值,从100~-100的连续值,步长为-10
tuple4:=[100:-10:-100]

*合并(合并在一起并去重)
tupleInt1:=[0,1,2,3,4,5]
tupleInt2:=[9,8,7,6,5]
tuple_union(tupleInt1, tupleInt2, Union)

*交集(两个元组中一样的元素)
tupleInt3:=[0,1,2,3,4,5]
tupleInt4:=[9,8,7,6,5]
tuple_intersection (tupleInt3, tupleInt4, Intersection)

* 替换
tupleInt5:=[0,1,2,3,4,5]
tuple_replace (tupleInt5,[0,1],['a','b'],Replaced)

* 插入
tupleInt6:=[0,1,2,3,4,5]
tuple_insert(tupleInt6,3,'x',Replaced2)

* 求绝对值
tuple_abs ([1,-23,-4,-5],Abs)

* const与元组的使用
* 长度为10,元素为const类型的新元组
tuple_gen_const(10,2,Newtuple)

* 链接
a:=[tupleInt1,tupleInt2]
* 获取索引对应的值
b:=a[1]
* 批量获取索引的值
c:=a[1:5]

* 选取索引中为x的元素
d:=subset(Replaced2,3)

*移除,对应索引的值
e:=remove(Replaced2,3)

在这里插入图片描述