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]
*批量为元组赋值,从0到150的连续值,步长为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)