Halcon学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Halcon学习笔记
1、Halcon的自我描述
Program Logic
Each program consists of a sequence of HALCON operators
The program can be structured into procedures
The sequence can be extended by using control operators like if, for, repeat, or while
The results of the operators are passed via variables
No implicit data passing is applied
Input parameters of operators can be variables or expressions
Output parameters are always variables
HDevelop has no features to design a graphical user interface
An HDevelop program is considered as a prototypic solution of the vision part of an application
HDevelop is typically not used for the final application
由此可以看出,Halcon的定位是一个类库,有着完整、快速实现函数,同时提供了HDevelop 作为快速开发的图形化(IDE)界面;但是,Halcon程序并不是一个完整的最终应用软件,它没有用户界面,也不提供显示的数据(公用的数据格式)。
Halcon的初学者也应当从参考Halcon的程序入手,熟悉Halcon类库,也即HDevelop-Based Programming;在此基础上,进入ORClass-Oriented Programming。这也是Halcon推荐的开发方式:
The vision part is solved with HDevelop,and the application is developed with C++ or Visual Basic。
2、HDevelop界面的学习
通过阅读Halcon的PPT,学到了下面一些有用的信息:
文件——浏览示例,可以看到很多有用的例子;
程序窗体中,可以浏览与编辑Procedues(过程),这个其实就是自定义函数咯~还可以自己修改这些过程,并添加说明文档;
F4——将函数语句注释掉;F3——激活;
本地过程(Local Procedue)与外部过程(Externel Procedue)
3、基本语法结构
Halcon的语法结构
类似于Pascal 与Visual Basic,大部分的语句是Halcon提供的算子,此外也包含了少部分的控制语句;
不允许单独声明变量;
提供自动的内存管理(初始化、析构及OverWrite),但句柄则需要显示释放;
C++(算子模式)
通过代码导出,以C++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下,全部函数声明为全局类型,数据类型只需要用Hobject、HTuple两类类型进行声明;
C++(面向对象)
可以以面向对象的方式重写代码,也即利用类及类的成员函数;
在这种模式下,控制变量的类型仍未HTuple,而图形数据可以由多种类型,如HImage等;其他语言(略)
4、Halcon数据结构
两类参数:图形参数Iconic (image, region, XLD)与控制参数Control (string, integer, real, handle),在Halcon算子的参数中,依次为:输入图形参数、输出图形参数、输入控制参数、输出控
制参数;并且其输入参数不会被算子改变。
图形参数Iconic:
Images
Multiple channels
Arbitrary region of interest
Multiple pixel types(byte, (u)int1/2/4,real, complex, direction, cyclic, vector_field) byte, uint2 //灰度图像的标准编码
int1, int2 //Difference of two images or derivates with integer precision(??)
int4 //两幅灰度图的频谱
direction //图片边缘的梯度方向
real //边缘提取及特定灰度值的轮廓
complex //图片频率分布
cyclic //Assigning one "gray" value to each color(??)
vector_field //连续图形的光学流分布
Regions
Efficient data structure (runlength encoding)
Extensive set of operators
Fastest morphology on the market
图形编码中,需要了解row 和run 两个术语;也是Halcon Region存储的方式
E x tended L ine D escription (XLD)
Subpixel accurate line and edge detection
Generic point list based data structure
Handling of contours, polygons, lines, parallels, etc.
此外,Halcon支持的类型还包括图形元组、控制变量元组及句柄:
元组的概念,使得可以用一个变量传递数个对象,可以由重载后的函数来进行处理;图形元组的下标从1开始,控制变量元组下标从0开始;句柄则可以用来描述窗体、文件等等,句柄不能是常量。
5、Halcon语言
输入控制参数可以是表达式,但图形参数、输出参数均应为变量;
String类型变量由单引号’括起来;此外还有一些特殊字符;
Boolean型变量包括true ( = 1 )、false ( = 0 ) ;不为零的整数将被认为true;但绝大多数的Halcon函数接受字符串型的表达:’true’‘false’,而非逻辑型表达;
函数返回常量用于标识错误:
H_MSG_TRUE no error 2
H_MSG_FALSE l ogical false 3
H_MSG_FAIL operator did not succeed 5
可以放在try…catch…endtry块中,也可以用dev_error_var()与dev_set_check() 来捕获;
控制语句结构:(与一般语言略有不同,它们也有输入输出变量)
if ... endif / if ... else ... endif / if ... elseif ... else ... endif
for ... endfor