HalconDotNet中如何从HTupleVector提取C#整数类型值
如何从Halcon的HTupleVector中提取整数坐标?
我从Halcon程序中获取到一个包含坐标的HTupleVector,格式如下:
{{[900, 200], [300, 200], [600, 700], [1000, 700], [200, 700]}}
我希望在C#中将这些值用作整数,但尝试了以下代码后程序崩溃:
for (int i = 0; i < coordList.Length; i++) { var x = coordList[i][0]; // 程序崩溃 var y = coordList[i][1]; // 程序崩溃 var x2 = snapped_coords[i].At(0); // 程序崩溃 var y2 = snapped_coords[i].At(1); // 程序崩溃 var x3 = snapped_coords.At(i).At(0); // 程序崩溃 var y4 = snapped_coords.At(i).At(1); // 程序崩溃 }
请问该如何正确从HTupleVector中提取整数数值?
正确提取方式
HTupleVector中的每个元素本质是HTuple类型,直接用索引访问可能因为类型转换或空引用导致崩溃。你可以通过以下两种可靠方式提取整数:
将HTuple转为int数组后访问
先把每个子HTuple转换成int数组,再直接取数组元素,这种方式直观且不易出错:for (int i = 0; i < snapped_coords.Length; i++) { HTuple coordTuple = snapped_coords[i]; int[] coords = coordTuple.TupleInt().ToArray(); int x = coords[0]; int y = coords[1]; // 这里使用x和y进行后续操作 }使用HTuple的
I方法直接取整数值
Halcon的HTuple提供了I方法(对应整数类型的访问),可以安全获取指定索引的整数值:for (int i = 0; i < snapped_coords.Length; i++) { HTuple coordTuple = snapped_coords.At(i); int x = coordTuple.I[0]; int y = coordTuple.I[1]; // 后续操作 }
崩溃原因说明
你之前的代码崩溃大概率是因为:
- 直接使用
[]索引访问HTuple时,没有正确处理类型转换(HTuple内部存储的是变体类型,需要显式转为int) - 可能存在空的HTuple元素,或者索引越界(比如某个子HTuple的长度不足2)
建议在提取前可以先做简单的合法性检查,避免异常:
for (int i = 0; i < snapped_coords.Length; i++) { HTuple coordTuple = snapped_coords[i]; if (coordTuple != null && coordTuple.Length >= 2) { int x = coordTuple.I[0]; int y = coordTuple.I[1]; // 处理坐标 } }
内容的提问来源于stack exchange,提问作者Malinko
相关产品推荐
相关产品推荐

