2014年08月08日 21:20:30

阅读数:5429

实例一(3d_coordinates.hdev):

for I := 1 to NumImages by 1

read_image (Image, 'calib/calib-3d-coord-'+I$'02d')——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夹中开头是calib-3d-coord-的图像。I$'02d'表示后面的数字是两位数,即0+‘I’。

实例二(3d_position_of_circles.hdev):

Dir := 'metal-parts'

for I := 1 to 5 by 1

read_image (Image, Dir + '/work_sheet_'+ I$'.2')

实例三(autobahn.hdev):

for i := 0 to 28 by 1

read_image (ActualImage, 'autobahn/scene_'+(i$'02'))

综合上面的几个实例我们可以看出I$'02d')相当于I$'.2'相当于(i$'02')

实例四(ball_seq.hdev):

ImageNames := 'die/'+['die_02','die_03','die_04','die_07']

read_image (Bond, ImageNames[0])

我把ImageNames[0]中的的0换成1读出的第一张图片就是die_03.png;换成2读出的第一张图片就是die_04.png;换成3读出的第一张图片是die_07.png。刚好与['die_02','die_03','die_04','die_07']里面的相对应。

实例五:

7.5.1   General Features of Tuple Operations——元组操作的一般特征

请注意,在所有以下表变量和常数已通过字母表示允许的数据类型取代。这些字母提供有关可能的限制,定义区域。字母和它们的意义列于表7.3。对这些符号的操作只能应用于指定的类型参数或表达式,返回一个结果。

符号名称i, a, l和s原子可以表示元组(元组长度为1)以及任意长度的元组。

integer:整数       arithmetic:算法        boolean:布尔体系       atomic:原子的

操作通常假设原子元组描述。如果数组包含多个元素,大多数操作的工作方式如下:

1、如果一个元组的长度为1,其他的元组中的所有元素相结合,与所选择的操作该单一值;

如果两个元组具有的长度大于1,这两个元组必须具有相同的长度(否则会发生运行时错误)。在这种情况下,所选择的操作适用于所有具有2、相同索引的元素。由此产生的元组的长度是相同的输入元组的长度;

3、如果一个元组的长度为0([]),运行时错误发生。

在表7.4中,你可以找到一些例子进行算术运算元组。要特别注意的顺序执行字符串串联。 HDevelop基本的算术运算符号是+, - ,*,/。 但+是一种二态操作,请注意:如果两个操作数都是数字,它增加了数字。如果至少有一个操作数是一个字符串,它连接两个操作数为字符串。

7.5.2   Assignment——任务

HDevelop ,assignment就是一个操作。要使用assignment,你必须用(Input, Result)的形式。这个操作符具有以下语义: Input (assignment的右侧) ,并将其存储在Result(assignment的左侧)中 。然而,在程序文本中的分配代表赋值运算符通常的语法为Result := Input。下面的例子概括assignment在HDevelop与 C的语法和转换版本之间的差异:

分配在C语法

u = sin(x) + cos(y)

HDevelop使用赋值运算符中定义

assign(sin(x) + cos(y), u)

这是在程序窗口中显示

u := sin(x) + cos(y)

如果该表达式的结果并不需要被存储到一个变量中,可以直接使用表达式的任何运算符作为输入值。但只要所得值需要多次使用或变量必须初始化就要用assignment(例如,一个循环)。

第二个赋值运算符是 insert(Input, Value, Index, Result) 。它被用来分配的元组元素。如果第一个输入参数,和第一输出参数是相同的,该呼叫

insert (Areas, Area, Radius-1, Areas)

作为一个操作调用的程序文本中未显示,但在更直观的形式为:

Areas[Radius-1] := Area

举一个例子:

assign([1,2,3], Area)

assign(9, Areas)

insert(Areas, Area, 1, Areas)

设置Areas为[ 1,9,3 ]

为了通过insert构造一个元组,通常是一个空的元组作为初始值,并在一个循环中插入元素:

Tuple := []

for i := 0 to 5 by 1
  Tuple[i] := sqrt(real(i))
endfor

正如你可以看到的例子,一个元组的指数从0开始。一个元组的一个插入,也可以以下列方式添加到元组的`back'或'front'。元组串联操作,可以用上逗号‘,’。在这里,操作assign 可用下面的代替:

assign([Tuple,NewVal],Tuple)转换为  Tuple := [Tuple,NewVal]

如果索引的位置是介于两者之间,已使用插入操作。它需要输入以下参数:首先应插入新值的元组,然后将新值作为第三个输入参数的索引位置。得到的结果(第四个参数)与输入的元组几乎是相同的,除了上面的定义的索引位置的新值(见上面的例子)。

在下面的示例中,区域通过圆扩张,并和之后的区域被存储到元组区。在这种情况下,插入操作被使用。

read_image (Mreut, 'mreut')

threshold (Mreut, Region, 190, 255)

Areas := []

for Radius := 1 to 50 by 1

dilation_circle (Region, RegionDilation, Radius)

area_center (RegionDilation, Area, Row, Column)

Areas[Radius-1] := Area

endfor

请注意,第一,变量区域必须进行初始化,以避免运行时错误。在这个例子中地区被初始化为空的元组([]) 。而不是插入操作分配与元组串联

Areas := [Areas,Area]

可以使用,因为该元素附加在后面的元组中。更多的例子可以在程序assign.dev中发现 。

7.5.3   Basic Tuple Operations——基本元组操作

一个基本的元组操作可选择一个或多个值,结合元组(级联)或得到的元素数(见表7.5作业对含有控制数据的元组)。

注意:[[t]] = [t] = t

|t|返回一个元组元素的数目。从零到元素数减一的元素范围的指标(即|t|-1)。因此,选择指数必须在此范围内。(请注意对象的指标(例如,select_obj)从1到元素的编号范围。)

Tuple := [V1,V2,V3,V4]

for i := 0 to |Tuple|-1 by 1

fwrite_string (FileHandle,Tuple[i]+'\n')

endfor

在下面的例子中,该变量包含[2,2,3,'a','a',2,3,'b','b']:

进一步的例子可以在程序tuple.dev中发现。HALCON算子对应的基本元组操作列于表7.5。

请注意,这些直接操作不能用于标志性的元组,即,标志性的对象不能从一个元组使用[ ],其数量不能使用| |直接测定。然而,为了这个目的,HALCON操作提供执行相应的任务。表7.6中你可以看到元组操作控制数据的工作(这是通过assign or insert)。表中符号t表示控制元组,符号p和q代表符号元组。

7.5.4   Tuple Creation——元组创建

assign ([],empty_tuple)                                                                      empty:=[]

assign (4711,one_integer)                         显示为                          one_integer := 4711

assign ([4711,0.815],two_numbers)                                                two_numbers := [4711,0.815]

assign ([],tuple)                                                                                      tuple := []

for (1,100,1,i)                                                  显示为                           for i := 1 to 100 by 1

assign ([tuple,4711],tuple)                                                                    tuple := [tuple,4711]

endfor                                                                                                      endfor

因为这不是很方便的一个特殊功能称为gen_tuple_const是可构造一个元组,一个给定的长度,其中每个元素具有相同的值。使用此功能,从上面的程序被简化为:

assign(gen_tuple_const(100,4711),tuple)                                 显示为               tuple := gen_tuple_const(100,4711)

如果我们要构建一个元组相同的长度为一个给定的元组得到一个简单的解决方案有两种方法,第一种是基于gen_tuple_const

assign(gen_tuple_const(|tuple_old|,4711),tuple_new)             显示为                tuple_new := gen_tuple_const(|tuple_old|,4711)

第二个是有点棘手,使用算术运算功能:

assign((tuple_old * 0) + 4711,tuple_new)                                   显示为                tuple_new := (tuple_old * 0) + 4711

在这里,我们得到第一个元组具有相同的长度与每一个元素设置为零。然后,我们添加常数的每个元素。在具有不同值的元组的情况下,我们必须使用循环版本的值分配到每个位置:

assign([],tuple)

for (1,100,1,i)

assign([tuple,i*i],tuple)

endfor

which is displayed as

tuple := []

for i := 1 to 100 by 1

tuple := [tuple,i*i]

endfor

在这个例子中,我们构造一个元组,从12到1002的平方值。

7.5.5   Basic Arithmetic Operations——基本算术运算

提供基本的算术运算的概述,请参阅表7.7。所有的操作都是左结合的,除了右结合元负运算符。赋值通常是从左至右进行。但是,括号可以改变赋值的顺序和一些操作有比别人更高的优先级(参见“7.5.14”)

HDevelop中的算术运算符合通常的定义。表达式可以有任意数量的括号。

除法运算符(A1/ A2)可以应用到整数以及实数。如果其结果是实数类型,则至少有一个操作数是实数类型。如果两个操作数都是整数类型,操作是一个整数除法。其它的算术运算符(乘法,加法,减法,和否定),可以适用于任一整数或实数。如果至少有一个操作数是实数,其结果将是一个实数。示例:

例子可以在arithmetic.dev中找到

7.5.6   Bit Operations——位操作
 本节介绍了用于处理位数字的操作。运算数必须是整数。

lsh(I1,I2)的结果是一个位左移应用的I1 I2倍。如果没有溢出,这是相当于一个乘法2i2。rsh(I1,I2)的结果是一个位元右移应用的i1 i2倍。对于非负的i1,这是相当于除数2i2。对于负的i1结果取决于所用的硬件。 lsh和rsh的结果是不确定的,如果第二个操作数为负值,或值大于32。更多的例子可以发现在程序bit.dev。

7.5.7   String Operations——字串操作

有几个字符串操作,可修改,选择,和组合字符串。此外,有些操作允许转换成数字(实数和整数)为字符串。

concatenate:联系、连接                substring:子链

$(字符串转换)

$将数字转换为字符串或修改字符串。操作有两个操作数:第一个($左边)是数字,已被转换。第二个($右边)指定的转换。这是类似于C语言编程的printf()函数格式字符串。这个格式字符串由以下四个部分组成

<flags><width>.<precision><conversion>

这个也可以用[-+ #]?([0-9]+)?(\.[0-9]*)?[doxXfeEgGsb]?表示

(这大致可以转换为零或更多的字符在第一支架对后跟零个或更多位数,任选一个点可以跟着数字后跟从最后一架双转换字符)

<flags>

零个或多个标记,以任何顺序,它修改的转换规格的意义。旗标可以包含下列字符:

—:转换的结果是左对齐的领域内。

+:一个符号转换的结果总是开始于一个标志,+或—。

<space>:如果一个符号转换的第一个字符是不是一个符号,空格是r前缀

#

该值将转换为“交替形式”。d和s(见下文)的转换,这标志是无效。o转换(见下文),它增加了精密力结果的第一个数字是零。x或X转换(见下文),一个非零的结果有0x或0X做前缀。e,E,f,g,G转换,结果总是包含一个基数字符。g和G转换,尾随零不是从结果中删除,相反,与平常不同。

<width>

指定一个最小字段宽度的小数位数的可选字符串。一个输出字段,如果转换后的值的字符比字段宽度减少,它是在左边(或右,如果左调整标志了)的字段宽度。

<precision>

字符串串联(+)可以应用于字符串或数值类型组合;如有必要,先被转化成字符串运算数(根据他们的标准表示)。至少一个操作数必须是一个字符串,已经使操作者可以作为一个字符串的concatenator。在下面的例子中的一个文件的名称(例如'Name5.tiff')。为了这个目的,两个字符串常量('name' '和'tiff’)和一个整数(循环指数i)连接:

for i := 1 to 5 by 1

read_image (Image, 'Name'+i+'.tiff')

endfor

7.5.8   Comparison Operations——比较运算

7.5.9   Boolean Operations——布尔运算

布尔运算and, xor, or,以及not(和、异、或,否)只是长度的1元组定义。

7.5.10   Trigonometric Functions——三角函数

7.5.11   Exponential Functions——幂指数功能

7.5.12   Numerical Functions——数值计算功能

7.5.13   Miscellaneous Functions——杂项功能

random:任意、随机         inverse:倒转、相反            ord——order                        chr——character

chrt——CHR+Tuple           rand——random                  sort:排列                            reverse:反转、调换

7.5.14   Operation Precedence——运算优先级

原文链接:http://k594081130.blog.163.com/blog/static/21835901320138923731316/

Halcon—Tuple中符号的含义相关推荐

  1. UML类图中符号的含义

    UML类图中符号的含义 类图中的基本符号由虚线.箭头.实线.空心三角形.空心菱形.实心菱形组成,这些符号的组合构成类图的基本符号 实线+箭头 表示关联关系 关联关系分类 自身关联 表示自身拥有一个自身 ...

  2. 计算机检索中各符号表示含义,文献检索中符号的含义这些符号在文献检索中的含义:AND、 OR、 NOT、 (W)、 TI、 W/s、 AU、 LENG...

    共回答了19个问题采纳率:84.2% 逻辑或(+,OR):表达检索词间的并列关系.可扩大检索范围,提高查全率.如:A+B,表明结果中含有A或B都为检索命中 逻辑与(*,AND):表达检索词间的交叉关系 ...

  3. c语言符号txt下载,c语言中符号含义.txt

    c语言中符号含义.txt char 壺 壨 char ; char 壻 char a; char asd; char xa; float 壺 壨 float ; float 壻 float a; fl ...

  4. Machine Learning课程中的常见符号的含义

    1 前言 本文归纳了一下 Machine Learning课程中的常见符号的含义. 2 常见符号的含义 m:表示样本的数量.例如:以学生成绩作为样本,共有四个学生的成绩,则m=4.

  5. makefile中一些符号的含义

    先标注一个很好的makefile教程 这里归纳了如下符号的含义,请对号入座如下 $@, $^, $<, $?和=, +=, :=, ?=和:\ 和 $, $$和% section1:(自动化变量 ...

  6. Linux中的 “~” 和 “/”符号代表含义?

    题目 Linux中的 "~" 和 "/"符号代表含义? 解析 首先对于root用户: "~" 表示的是root用户的目录,可以理解为每个用户 ...

  7. 科研中论文常见数学符号及其含义(科研必备,建议收藏)

    论文常见数学符号及其含义(科研必备) 返回论文和资料目录 数学符号在数学领域是非常重要的.在论文中,使用数学符号可以使得论文更加简洁明了,同时也能够准确地描述各种概念和理论.在本篇博客中,我将介绍一些 ...

  8. 计算机中内存是什么符号,内存条ddr是什么意思?内存中的ddr含义介绍

    内存条是电脑中重要的配件之一,一些朋友在装内存条的时候细心的发现,内存条上有个DDR的字样,于是就有了一个疑问,内存条的ddr是什么意思呢?ddr全称Double Data Rate,即双倍数据速率. ...

  9. MySQL番外篇:INT、CHAR以及VARCHAR数据类型中M的含义

    MySQL中INT.CHAR以及VARCHAR数据类型中M的含义 在MySQL数据库使用过程中,对于int(M).tinyint(M).char(M).varchar(M)等,这个M值到底代表什么意思 ...

最新文章

  1. Datawindow.net 子数据窗口出错
  2. Linux初学者接住了---Linux常用命令
  3. 【Android 安装包优化】Tint 着色器 ( 简介 | 布局文件中的 Tint 着色器基本用法 | 代码中使用 Tint 着色器添加颜色效果 )
  4. windows 10 安装和使用中5个常见问题
  5. linux 环境变量 term,linux – TERM环境变量未设置
  6. 用C语言写的程序如何控制计算机硬件?
  7. 【工业控制】如何优化波形
  8. 《高性能python》第一章-理解高性能Python-阅读笔记
  9. java刷卡机_JavaPOS
  10. 【TypeScript系列教程12】Number对象的基本使用
  11. 在html中写js提示错误,页面HTML标签优化
  12. vb datatable转二维数组_一次稀疏数组的实现过程(附解答思路)
  13. 《Java核心技术卷一》读书笔记(二)
  14. ClientKey实现登录QQ空间,并设置背景音乐
  15. matlab绘制函数傅里叶,MATLAB中如何实现矩形函数的傅里叶变换
  16. ABP框架—从项目下载到运行详细讲解
  17. 轻量级开源聊天解决方案喧喧发布 1.0 版本
  18. 抽样中误差的相关概念和种类
  19. 坐标西安 面试中电后端Java岗 被面试官狂问mybatis
  20. windows和linux系统文件目录

热门文章

  1. ResourceDictionary主题资源替换(二) :编译期间,替换主题资源
  2. 【BZOJ4543】【POI2014】Hotel加强版(长链剖分)
  3. 48_并发编程-线程-资源共享/锁
  4. 主席树的各类模板(区间第k大数【动,静】,区间不同数的个数,区间=k的个数)...
  5. if...elif...else...fi和case...esac的脚本条件判断式
  6. Mysql导入excel数据,解决某些特殊字符乱码问题
  7. poj 3071 Football
  8. Word -- 列表重新编号
  9. HDU 5392 BC #51
  10. 原来做的一个语义搜索软件的界面