Halcon示例之根据矩形中心和旋转角度求矩形角点

Halcon示例之根据矩形中心和旋转角度求矩形角点

展开

实例源代码:根据矩形的中心坐标和矩形的旋转角度求矩形四个角点坐标;
需要说明的是:我们是处理图像中的信息,即输入信息和输出信息都是以图像坐标系为参考的,而图像坐标系常见的样子是水平(X轴)向右为正,垂直(Y轴)向下为正,其实这是所谓的2D笛卡尔坐标系,属于左手坐标系;但是矩形的旋转角度,却是以另外的坐标系来描述的,即水平(X轴)向右为正,垂直(Y轴)向上为正,这是我们在学习中常用坐标系,也是2D笛卡尔坐标系,属于右手坐标系,我们更习惯于在右手坐标系里求解数学问题,这个实例中涉及到的知识点主要是坐标变换(仿射变换)、其次坐标等;我们以图像坐标系进行输入信息并观察在此坐标系中的效果,因此需要在右手坐标系中求解,然后在图像坐标系观察。背景简介完毕,我来大致描述一下实现过程:我们假定左手坐标系和右手坐标系共用原点,首先根据矩形中心在左手坐标系中的坐标,得到平行坐标轴时的矩形角点坐标,然后将矩形中心以及角点坐标转换为右手坐标系中的坐标;再根据坐标变换,在右手坐标系中求解绕矩形中心旋转Phi角度后的角点坐标;最后将在右手坐标系中的角点坐标转换为左手坐标系中的坐标,即观察效果。
详细求解过程请自行尝试,若有疑问请私信!
以下是Halcon 下的代码(本地函数文件形式):(英文描述可以提高逼格哦!)

 
  1. *Initialize the variable for coordinate of vertexes of rectangle2

  2. VertexesY:=[]

  3. VertexesX:=[]

  4. *Initialize the temperary variables

  5. RowTem:=0

  6. ColTem:=0

  7. *Judge the rectangle if it is available

  8. if(Len1<0 or Len2<0)

  9. return()

  10. endif

  11. *Compute the sine and cosine of tuple Phi

  12. tuple_cos(Phi,Cos)

  13. tuple_sin(Phi,Sin)

  14. *Compute the coordinate of the upper-right vertex of rectangle

  15. RowTem:=CenterY-Len1*Sin-Len2*Cos

  16. ColTem:=CenterX+Len1*Cos-Len2*Sin

  17. VertexesY:=[VertexesY,RowTem]

  18. VertexesX:=[VertexesX,ColTem]

  19.  
  20. *Compute the coordinate of the upper-left vertex of rectangle

  21. RowTem:=CenterY+Len1*Sin-Len2*Cos

  22. ColTem:=CenterX-Len1*Cos-Len2*Sin

  23. VertexesY:=[VertexesY,RowTem]

  24. VertexesX:=[VertexesX,ColTem]

  25.  
  26. *Compute the coordinate of the bottom-left vertex of rectangle

  27. RowTem:=CenterY+Len1*Sin+Len2*Cos

  28. ColTem:=CenterX-Len1*Cos+Len2*Sin

  29. VertexesY:=[VertexesY,RowTem]

  30. VertexesX:=[VertexesX,ColTem]

  31.  
  32. *Compute the coordinate of the bottom-right vertex of rectangle

  33. RowTem:=CenterY-Len1*Sin+Len2*Cos

  34. ColTem:=CenterX+Len1*Cos+Len2*Sin

  35. VertexesY:=[VertexesY,RowTem]

  36. VertexesX:=[VertexesX,ColTem]

  37.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值