Halcon的angle_ll和angle_lx角度的解析

本文详细介绍了Halcon的angle_ll和angle_lx算子在计算线与线之间及线与x轴之间角度的应用。angle_ll算子用于计算两条直线的夹角,遵循较小夹角原则,角度范围为-Pi~Pi。angle_lx算子计算线与x轴的夹角,同样范围为-Pi~Pi,根据象限确定正负。文章通过实例和图示清晰地阐述了这两个算子的工作原理和角度正负判断。
摘要由CSDN通过智能技术生成

Halcon的angle_ll和angle_lx角度的解析 - 木乔ni - 博客园

在Halcon的使用过程中经常要使用到angle_llangle_lx两个算子来求解线与线之间的角度以及线与水平轴(x轴)之间的角度,而线线之间和线轴之间的角度正负往往是困扰我们的问题,下面对这两种情况进行解释说明。


  1. angle_ll(Row1,Col1,Row2,Col2,Row3,Col3,Row4,Col4,Angle)

  该算子的前四个参数分别代表第一条线的起点行列坐标终点行列坐标,后面四个参数分别代表第二条线的起点行列坐标终点行列坐标,这里需要注意的是这些参数的输入顺序会影响到直线的方向,直线的方向是由起点指向终点,如下图所示:

   angle_ll算子在计算两条直线之间的夹角的方式,可以理解为第一条直线绕着其起点进行旋转,直至第一条直线的方向和第二条直线的方向相同时,第一条直线所旋转的角度即为两条直线的角度,但是第一条直线顺时针和逆时针方向都可以转至和第二条直线相同的方向,应该朝哪个方向转动来计算角度呢?angle_ll算子的角度范围为-Pi~Pi,也就是说第一条直线的转动方向选择的两条直线的夹角比较小的方向,如下图所示:

  如果使用angle_ll算子计算图中红色直线与绿色直线的夹角,是应该将红色直线沿着蓝色箭头方向旋转还是黄色箭头方向进行旋转呢?答案是黄色箭头方向,因为黄色的夹角小于蓝色的夹角,蓝色夹角的角度超过了angle_ll算子的取值范围。

  说完了旋转的方向,现在来讨论下角度的正负,如果第一条直线旋转至第二条直线的方向为顺时针,那么角度为负值,逆时针则为正值,下面通过几个Halcon的程序来演示。

 

 

 

2.angle_lx(RowBegin,ColBegin,RowEnd,ColEnd,Angle)

  RowBegin——直线起点行坐标

  ColEnd——直线起点列坐标

  RowEnd——直线终点行坐标

  ColEnd——直线终点列坐标

  angle_lx关于直线的方向和上文中ange_ll算子的直线方向规定相同,即直线的方向由起点指向终点,x轴的方向规定水平向右,angle_lx的角度范围也为-Pi~Pi,其中,当直线方向与x轴方向构成的夹角位于一二象限时,该直线与x轴的夹角角度范围在0~Pi,当直线方向与x轴方向构成的夹角位于三四象限时,该直线与x轴的夹角范围在-Pi~0,具体可结合下图理解。

 halcon  案例

set_display_font (200000, 26, 'mono', 'true', 'false')
Row1 := 100
Col1 := 100
Row2 := 500
Col2 := 600
Row1Half := (Row1 + Row2)/2
Col1Half := (Col1 + Col2)/2

dev_set_color ('red')
gen_region_line (RegionLines, Row1, Col1, Row2, Col2)
gen_arrow_contour_xld (Arrow1, Row1Half, Col1Half, Row1, Col1, 25, 15)

dev_set_color ('yellow')
gen_region_line (ROI_0, 350, 100, 350, 750)
XRowHalf := 350
XColHalf := (100 + 700)/2
gen_arrow_contour_xld (Arrow, XRowHalf, XColHalf,350, 750, 25, 15)

angle_lx (Row2, Col2, Row1, Col1, Angle)
disp_message (200000, '红色线角度为:' + deg(Angle), 'window', 12, 12, 'black', 'true')
disp_message (200000, 'X', 'Image', 345, 765, 'yellow', 'false')

 

set_display_font (200000, 26, 'mono', 'true', 'false')
Row1 := 100
Col1 := 100
Row2 := 500
Col2 := 600
Row1Half := (Row1 + Row2)/2
Col1Half := (Col1 + Col2)/2

dev_set_color ('red')
gen_region_line (RegionLines, Row1, Col1, Row2, Col2)
gen_arrow_contour_xld (Arrow1, Row1Half, Col1Half, Row2, Col2, 25, 15)

dev_set_color ('yellow')
gen_region_line (ROI_0, 350, 100, 350, 750)
XRowHalf := 350
XColHalf := (100 + 700)/2
gen_arrow_contour_xld (Arrow, XRowHalf, XColHalf,350, 750, 25, 15)

angle_lx (Row1, Col1,Row2, Col2,  Angle)
disp_message (200000, '红色线角度为:' + deg(Angle), 'window', 12, 12, 'black', 'true')
disp_message (200000, 'X', 'Image', 345, 765, 'yellow', 'false')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值