You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类型,直接用索引访问可能因为类型转换或空引用导致崩溃。你可以通过以下两种可靠方式提取整数:

  1. 将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进行后续操作
    }
    
  2. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:30