设置首页收藏本站
开启左侧

[文档] Halcon向量Vector基础学习

[复制链接]
Criss 发表于 2020-4-8 13:56:11 | 显示全部楼层 |阅读模式
提示:Halcon中支持向量需要Halcon版本在12.0及其以上版本才可以支持。
  1. *vector是一个可以容纳任意数量元素的容器,所有元素必须具有完全相同的变量类型(即元组、图形对象或向量)。
  2. *变量类型"vector"特定于HDevelop中使用,它在HDevelop 12.0或更高版本中可用。
  3. *请注意,使用向量变量的程序不能在旧版本的HDevelop中执行。

  4. *称为一维向量的元组或对象,称为二维向量的元组或对象,依此类推等等。
  5. *向量的类型不能在程序中改变,即它的维数必须保持不变,元组的向量不能被分配图形对象,反之亦然。

  6. *一维向量
  7. vector1 := {[1], [2], [3]}   //代码后注释可用双斜线

  8. *里面元组为1的情况下可以不要方括号
  9. vector1 := {1, 2, 3}

  10. *变量带入与计算
  11. t1 := 5
  12. vector2 := {t1, t1 * 2, 3}

  13. *获取向量的长度
  14. vec_len:=vector2.length()

  15. *获取里面的元素,通过at(索引)方法获取
  16. for Index := 0 to vec_len-1 by 1
  17.     vec_current := vector2.at(Index)
  18. endfor

  19. *修改索引2(第三个)值为15
  20. vector2.at(2) := 15

  21. *连接另外一个向量组成新的向量
  22. vector3 := vector2.concat(vector1)

  23. *清空
  24. vector3.clear()

  25. *插入数据到索引位置 结果依次变成{[10],[20]}
  26. vector3.insert(0,10)
  27. vector3.insert(1,20)

  28. *移除索引为0,则只剩下{[20]}
  29. vector3.remove(0)

  30. *图形向量 和上面的控制变量操作方法一致
  31. read_image (Image, 'clip')
  32. threshold (Image, Region, 0, 63)
  33. connection (Region, ConnectedRegions)
  34. vectorO := {Image, Region, ConnectedRegions}

  35. *获取图形向量的长度
  36. vecO_len:=vectorO.length()

  37. *打印向量里元素的图形
  38. gen_empty_obj (EmptyObject)
  39. for Index := 0 to vecO_len-1 by 1
  40.     EmptyObject := vectorO.at(Index)
  41. endfor

  42. *清空图形变量
  43. vectorO.clear()

  44. *错误的代码 Image不属于元组类型变量,而属于图形变量
  45. *vectorE:={['51halcon'],[1111],Image}

  46. *连续操作 设置 v 为 {5, 4, 2, 3}
  47. v := {1, 2, 3}
  48. v.insert(1, 5).insert(2, 4).remove(0)           

  49. *判断两个相等与否 ==  !=
  50. a:={1,2,3}
  51. b:={1,2,3}
  52. dev_get_window (WindowHandle)
  53. if(a == b)
  54.     disp_message (WindowHandle, '两向量相等', 'window', 12, 12, 'green', 'true')
  55. else
  56.      disp_message (WindowHandle, '两向量不等', 'window', 12, 12, 'green', 'true')
  57. endif

  58. *手动实现声明向量来存储点位数据,由于无法直接声明{},所以赋值一个初值数据,最后要删除的
  59. VectorPos:={[0,0]}
  60. for i :=1 to 10 by 1
  61.     pts:={[i*2,i*5]}
  62.     VectorPos:=VectorPos.concat(pts)
  63. endfor
  64. VectorPos.remove(0)


  65. *二维向量,其中行1为vector1,行2为{[4,5,6,7], [8,9]}
  66. vectorV := {vector1, {[4,5,6,7], [8,9]}}

  67. *获取二维向量 行2的第一组和第二组值
  68. A:=vectorV.at(1).at(0)
  69. B:=vectorV.at(1).at(1)

  70. *修改行2的[8,9]元素为[8,10],注意方括号里面是元组操作方式
  71. vectorV.at(1).at(1)[1] := 10

  72. *获取行2的元素长度
  73. vec_line2_len :=vectorV.at(1).length()

  74. *可以定义空向量{}
  75. vectorV2 := {{1,2}, {}}


  76. *空向量没有指定类型
  77. *将空向量{}赋值给向量等同于使用clear()方法
  78. vectorO2 := vectorO
  79. vectorT2 := vector1
  80. vectorV2 := vectorV
  81. vectorO2 := {}
  82. vectorT2 := {}
  83. vectorV2 := {}


  84. *向量转换成元组
  85. convert_vector_to_tuple (vectorV, T)    // T := [1, 2, 3, 4, 5, 6, 7, 8, 10]

  86. *元组转换成向量
  87. *注意:第二个参数是元组的长度,设置1就是每个向量元素的长度为1,依次类推
  88. convert_tuple_to_vector_1d (T, 1, ResultVector)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表