HALCON/C++ 提供了 HVector 类,以便在 C++ 程序中使用 HALCON 向量。HALCON 向量是一个容器,可以容纳任意数量的相同数据类型(即元组、图标对象或向量)和维度的元素。向量的类型(即维度和元素类型)在初始化向量实例时定义,在其生命周期内不能更改。一维向量可以是元组向量,也可以是图标对象向量。二维向量可以是元组向量的向量,也可以是图标对象向量的向量,以此类推。
从根类 HVector 派生了两个类:
下面将介绍如何在 HALCON/C++ 中使用向量的一些基本信息,例如如何构造向量以及如何访问和设置向量元素。有关可用功能的完整列表,请参阅 %HALCONROOT%\include\halconcpp 中的相应头文件 HVector.h。
如前所述,向量分为图标对象向量(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 HTupleVector vectorTupMulti(2);
您也可以通过在括号中指定所需的维度,创建一个具有两个以上维度的多维向量。不过,向量的维数是其类型的一部分,在程序中必须保持不变,不能更改。
请注意,这些调用创建的向量仍然是空的。下文将介绍如何设置向量的元素以及如何访问它们。
与向量的构造一样,访问和设置向量元素的调用也因向量类型而异。使用 O() 方法可以访问图标对象向量的单个元素,而使用 T() 方法可以访问元组向量的元素。
// Access a vector element of a one-dimensional HObjectVector vectorObj[elem_index].O(); // Access a vector element 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 定义指定子向量的所需元素。
If a vector element is to be set, the expression for accessing a vector element is used as reference to the HObject or HTuple element to be set. The right side of the assignment specifies the value which is assigned to the vector element. 如果要设置一个向量元素,访问向量元素的表达式将被用作要设置的 HObject 或 HTuple 元素的引用。赋值的右侧指定了分配给向量元素的值。
// 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");
也允许写入不存在的向量元素。如有必要,向量会自动填充空元素。
如果不再需要对向量进行进一步处理,可以通过下面的调用明确清除其内容:
vectorTup.Clear();
除了上述功能外,HObjectVector 和 HTupleVector 还为在 HALCON/CPP 中使用 HALCON 向量提供了更多的功能,例如插入或移除向量元素,或连接向量。更多信息请参阅 %HALCONROOT%\include\halconcpp 中的相应头文件 HVector.h。