HALCON 运算符参考包含 HALCON/C++ 的泛型类和成员函数的完整列表。
1、Iconic Objects
HALCON/C++ 中标志性参数类的基类是 HObject 类,它管理数据库中的条目,即对象的复制或释放。 HObject 类可以包含所有类型的图标对象。 这样做的优点是像 DispObj() 这样的重要方法可以以相同的方式应用于所有图标对象。 从根类 HObject 派生了三个类:
- 用于处理区域的 HRegion 类。
- 用于处理图像的 HImage 类。
- 用于处理多边形的 HXLD 类。
下面将更详细地描述这些类。
1.1 Regions
区域是图像平面中的一组坐标。 这样的区域不需要连接,它可以包含孔。 区域可以大于实际图像格式。 区域由 HALCON 中所谓的游程编码表示。 HRegion 类表示 HALCON/C++ 中的一个区域。 除了那些可以通过 HRegion 调用的操作符(另见第 39 页的 5.2.2 节)之外,HRegion 还提供了以下成员函数:
HTuple HRegion::Area(); // 区域的面积,即像素数,参见AreaCenter的参考手册条目。
HTuple HRegion::Row(); // 区域的中心行。
HTuple HRegion::Column();// 区域 的中心列。
1.2 Images
HALCON 图像不仅仅是一个像素矩阵:在 HALCON 中,这个矩阵称为通道,图像可能由一个或多个这样的通道组成。 例如,灰度值图像由单个通道组成,彩色图像由三个通道组成。 通道不仅可以包含用于表示灰度值图像的标准 8 位像素(像素类型字节),HALCON 还允许图像包含各种其他数据,例如 16 位整数(int2 类型)或 32 位浮点数(实数类型)来表示导数。 除了像素信息之外,每个 HALCON 图像还以 HALCON 区域的形式存储其所谓的域。 域可以被解释为一个感兴趣的区域,即 HALCON 操作符(有一些例外)将它们的处理限制在这个区域。
HTuple HImage::Width();
//Return the width of the image, see reference manual entry of GetImageSize.
HTuple HImage::Height();
//Return the height of the image, see reference manual entry of GetImageSize.
1.3 XLD Objects
XLD 是 eXtended Line Description 的缩写。 这是一种用于描述区域(例如,任意大小的区域或多边形)或任何封闭或开放轮廓(即线)的数据结构。 与以像素精度表示所有区域的区域相比,XLD 对象提供亚像素精度。 有两种基本的 XLD 结构:轮廓和多边形。 HALCON/C++ 提供了一个基类 HXLD 和一组从 HXLD 派生的专门类,例如,用于轮廓的 HXLDCont 或用于多边形的 HXLDPoly。 与前面部分中描述的类相比,XLD 类仅提供与 HALCON 运算符对应的成员函数。
2、Control Parameters
HALCON/C++ 可以为 HALCON 操作符处理不同类型的字母数字控制参数: • 整数(Hlong), • 浮点数(double),以及 • 字符串(HString)。
一种特殊形式的控制参数是所谓的句柄,它提供对更复杂的数据结构的访问,如窗口、图像采集连接或基于形状的匹配模型。 在内部,句柄几乎总是由离散数字(长)表示。 对于句柄,存在相应的类,在 2.2 节中进行了描述。
通过 HTuple 类,HALCON/C++ 为控制参数提供了一个容器类。 更重要的是,HTuple 是多态的,即它也可以包含混合类型的控制参数数组。
2.1 Tuples
HTuple 类实现了一个动态长度的数组。 默认构造函数构造一个空数组 (Length() == 0)。 这个数组可以通过赋值动态扩展。 内存管理,即重新分配、释放,也由类管理。 访问数组的索引在 0 和 Length()−1 之间的范围内。 HTuple 类是线程安全的。 HTuple 实例的副本可以同时在不同的线程中使用。 以下成员函数仅反映总数的一小部分。 有关更多信息,请参阅 %HALCONROOT%\include\halconcpp 中的文件 HTuple.h。
/***************************************************************************/
/* General members */
/***************************************************************************/
// Clear all data inside this tuple
void Clear();
// The number of elements of this tuple
Hlong Length() const;
// The data type of this tuple (pure data types or mixed tuple)
HTupleType Type() const;
// Create a detached copy duplicating the underlying tuple data
HTuple Clone() const;
// Append data to existing tuple
HTuple &Append(const HTuple& tuple);
// Returns a simple string representation of the tuple contents,
// mainly intended for debugging purposes
HString ToString() const;
/***************************************************************************/
/* Data access */
/***************************************************************************/
// Direct array access will raise an exception if tuple type does not match!
// Modifications to array will affect data in tuples as well.
Hlong* LArr();
double* DArr();
char** SArr();
Hcpar* PArr();
2.2 Classes Encapsulating Handles
可能最突出的句柄类是 HWindow,它在 2.2.1 节中进行了描述。 HALCON/C++ 还提供用于处理文件或功能的类,例如访问图像采集设备、测量或基于形状的匹配。 有关概述,请参阅第 2.2.2 节
2.2.1 Windows
HWindow 类以非常方便的方式提供了 HALCON 窗口的管理。 HALCON 窗口的属性可以轻松更改,可以显示图像、区域和多边形等。 除了可以通过 HWindow 调用的操作符之外,HWindow 还提供了以下成员函数:
/*****************************************************************************
* Non-generic convenience members *
*****************************************************************************/
// open_window: Open a graphics window.
HWindow(Hlong Row, Hlong Column, Hlong Width, Hlong Height);
// Click: Wait until mouse click in window occurs
void Click() const;
// Closes the window.
void CloseWindow();
2.2.2 Other Handle Classes
HALCON/C++ 提供了所谓的句柄类,如 HFramegrabber、HBarCode 或 HClassBoxMlp。 例如,类 HBarCode 提供了一个基于运算符 CreateBarCodeModel 的构造函数。 上面列出的所有句柄类都提供了 SetHandle() 和 GetHandle() 方法,它们允许访问底层句柄; 此外,这些类提供了一个运算符,可以将类的实例转换为相应的句柄。 这些方法通常用于组合面向过程和面向对象的代码;
3、Vectors
HALCON/C++ 提供了类 HVector 用于在 C++ 程序中使用 HALCON 向量。 HALCON 向量是一个容器,可以容纳任意数量的相同数据类型(即元组、图标对象或向量)和维度的元素。 向量的类型,即它的维度和元素的类型是在初始化向量实例时定义的,并且在它的生命周期内不能改变。 具有一维的向量可以是元组向量或图标对象向量。 二维向量可以是元组向量的向量,也可以是图标对象的向量,等等。 从根类 HVector 派生出两个类: • 类 HObjectVector 用于处理图标对象的向量 • HTupleVector 类用于处理元组向量 下面给出了一些关于如何在 HALCON/C++ 中使用向量的基本信息,例如,如何构造向量以及如何访问和设置向量元素。 有关可用功能的完整列表,请参阅 %HALCONROOT%\include\halconcpp 中的相应头文件 HVector.h。
- Construction of Vectors
正如上面已经提到的,图标对象的向量(HObjectVector)和元组的向量(HTupleVector)是有区别的。 向量的类型必须在其构造时定义,如下所示:
// Create a one-dimensional vector of iconic objects
HObjectVector vectorObj(1);
// Create a one-dimensional vector of tuples
HTupleVector vectorTup(1);
请注意,向量的类型在其构造后无法在程序中更改。 因此,不能将元组分配给标志性对象的向量,反之亦然。 要创建二维向量,即标志性对象的向量向量或元组向量的向量,您可以使用以下行:
// Create a two-dimensional vector of iconic objects
HObjectVector vectorObjMulti(2);
// Create a two-dimensional vector of tuples
TupleVector vectorTupMulti(2);
您还可以通过在括号中指定所需的维度来创建具有两个以上维度的多维向量。 但是,向量的维数是其类型的一部分,必须在程序中保持不变,不能更改。 请注意,这些调用创建的向量仍然是空的。 下面描述了如何设置向量的元素以及如何访问它们。
- Accessing and Setting Vector Elements
与向量的构建一样,访问和设置向量元素的调用因向量类型而异。 可以使用方法 O() 访问图标对象向量的单个元素,而可以使用 T() 访问元组向量的元素。
// Access a vector element of a one-dimensional
HObjectVector vectorObj[elem_index].O();
// Access a vector elment of a one-dimensional
HTupleVector vectorTup[elem_index].T();
要访问的向量元素由方括号中的指定索引寻址。 如果要访问多维向量的子元素,则必须改用相应子向量及其子元素的索引。
// Access a subelement of a two-dimensional
HObjectVector vectorObjMulti[vec_index][elem_index].O();
左索引 vec_index 定义子向量的索引, elem_index 定义指定子向量的所需元素。 如果要设置向量元素,则使用访问向量元素的表达式作为对要设置的 HObject 或 HTuple 元素的引用。 赋值的右侧指定分配给向量元素的值。
// Access a subelement of a two-dimensional
HObjectVector vectorObjMulti[vec_index][elem_index].O();
// Set a vector element of a one-dimensional
HObjectVector vectorObj[0].O() = HImage("Image");
// Set a vector element of a one-dimensional
HTupleVector HTuple tuple;
tuple[0] = 1.0;
tuple[1] = 2.5;
vectorTup[0].T() = tuple;
在上面的示例代码中,Image 被复制并设置为 vectorObj 的第一个向量元素。 元组也被复制并设置为 vectorTup 的第一个向量元素。 可以使用相同的调用来设置多维向量的子元素。 但是,必须为相应的向量元素及其要设置的子元素指定多个索引,而不是单个索引。
// Set a subelement in a two-dimensional
HObjectVector vectorObjMulti[0][1].O() = HImage("Image");
也允许写入不存在的向量元素。 然后,如果需要,向量会自动填充空元素。
- Destruction of a Vector
如果不再需要向量进行进一步处理,则可以通过以下调用明确清除其内容:
vectorTup.Clear();
Additional Information
除了所描述的功能之外,HObjectVector 和 HTupleVector 还为在 HALCON/CPP 中使用 HALCON 向量提供了更多功能,例如,插入或删除向量元素,或向量的串联。 更多信息请参考%HALCONROOT%\include\halconcpp中对应的头文件HVector.h。