2.1什么是算子?
算子就是由Halcon开发团队对图像处理的算法进行封装为方法由我们使用,作用就是对图像数据进行处理
2.2算子的格式?
算子名称(图像输入参数,图像输出参数,控制输入参数,控制输出参数)
算子结构中的四种参数被三个冒号分割开,一个算子中可能这四种参数不会都存在,但是参数的次序不会变化,算子中输入参数不会被修改,只会被算子使用,算子只能修改输出的参数。
这个算子在被调用时需要输入一个图像参数和两个控制参数才能输出一个图像参数。
Halcon中每条算子都有相对应的颜色,点击菜单栏中的编辑->参数选择->程序窗口查看算子的颜色如下:
2.3 Halcon转换相关算子
弧度转角度:tuple_deg
算子:tuple_deg( : : Rad : Deg)
示例:tuple_deg (Phi5, Deg)
Phi5(输入控制参数):输入弧度
Deg(输出控制参数):输出角度
角度转弧度:tuple_rad
算子:tuple_rad( : : Deg : Rad)
示例:tuple_rad (Deg, Rad)
Deg(输入控制参数):输入角度
Rad(输出控制参数):输出弧度
2.4 Halcon 数据类型
资料扩展:https://www.bbsmax.com/A/xl56GOg4dr/
HTuple类型:
1. 既可以表示的类型有int,double、float、string,既可以表示单个值;
2. 可以是容器;
3. 可以是数组,数组遍历时需要有下标,如:变量名称[下标]
字符串表示:tuple:='扩视机器视觉'
Tuple:表示变量,自定义名称
“:=“:为赋值符号,将右边的值赋值给左边变量
'扩视机器视觉':字符串需要用英文的单引号引起来表示
字符数组表示:tuple1:=['扩视','机器','视觉']
'扩视','机器','视觉':多个字符串组成字符串数组,需要用顿号隔开,并且每个字符串需要用单引号引起来
· 注意:数组中每个元素的索引是从0开始的
·
str:=tuple1[0]结果为:'扩视'
数组表示:nums:=[1,2,3,4,5,6,7,8,9]
[1,2,3,4,5,6,7,8,9]:数字用顿号隔开即可
索引数组:n:=nums[0]
得出结果为:1
boolean为布尔类型,它的值就两个,要么是真True 要么是假False,一般用布尔值作为判断条件判断
示例:
n:=11 //初始化n值
if (n>10) //判断如果n>10就显示信息否则就不显示信息 n>10结果为True
disp_message (200000, n, 'window', 12, 12, 'black', 'true')
endif
结果显示信息为11
2.5 小数点保留 转string
小数保留位数后转字符串tuple_string
算子:tuple_string( : : T, Format : String)
示例:tuple_string (num10, '.2f', String)
num10(输入控制参数1):输入数值
'.2f'(输入控制参数2):输入保留几位小数 2f两位 3f三位…
String(输出控制参数):输出保留小数字符串
2.6 求元素个数
Num:=|Tuple|//求元素个数
2.7 合并元素数据
Uni:=[Tuple1,Tuple2]//合并 元素数据
2.8 循环
While循环:只要满足条件就一直循环
示例:
b:=0 //初始化值
while (n>10) //判断如果条件成立就一直执行 里面的语句
b:=b+1 //b加1后重新赋值给b
**等待
wait_seconds (1)
endwhile
For循环:
示例:
f:=0 //初始化值
for Index3 := 0 to 10 by 1 //Index3初始值为0需要加到10就退出循环 每执行一次循环Index3加1
f:=f+1 //f加1后重新赋值给b 执行的语句
**等待
wait_seconds (1)
endfor
2.9 条件判断
If Elseif 条件判断:
示例:
n1:=[11 ,20] //初始化n值
if (n1[0]>15) //判断如果n1 0索引的元素值>15就显示信息
disp_message (200000, n1[0], 'window', 12, 12, 'black', 'true') //执行的语句
elseif (n1[1]>15) //判断如果n1 1索引的元素值>15就显示信息
disp_message (200000, n1[1], 'window', 12, 12, 'black', 'true') //执行的语句
endif
2.10 跳出循环break和continue
Break当循环执行到break时 整个循环停止结束
示例:
f:=0 //初始化值
for Index3 := 0 to 10 by 1 //Index3初始值为0需要加到10就退出循环 每执行一次循环Index3加1
f:=f+1 //f加1后重新赋值给b 执行的语句
if (f==3)
break //跳出循环
endif
disp_message (200000, f, 'window', 12, 12, 'black', 'true')
**等待
wait_seconds (1)
endfor
continue:跳出本次循环 不执行下面语句 重新继续新的循环
示例:
f:=0 //初始化值
for Index3 := 0 to 10 by 1 //Index3初始值为0需要加到10就退出循环 每执行一次循环Index3加1
f:=f+1 //f加1后重新赋值给b 执行的语句
if (f==3)
continue//跳出本次循环 不执行下面语句 重新继续新的循环
endif
disp_message (200000, f, 'window', 12, 12, 'black', 'true')
**等待
wait_seconds (1)
endfor