1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > [Halcon几何] 矩形顶点和对角连线角度计算

[Halcon几何] 矩形顶点和对角连线角度计算

时间:2021-04-26 15:32:08

相关推荐

[Halcon几何] 矩形顶点和对角连线角度计算

描述:因为halcon中算子求的矩形角度有时候不是我所需要的角度,以算子smallest_rectangle2为例:

1)其获取的矩形角度范围- 90< angle <= 90,即无论通过算子gen_rectangle2生成的Region角度多大,smallest_rectangle2获取的角度都不会超出这个范围。

2)算子smallest_rectangle2输出的角度是通过计算Region长轴与X轴正方向夹角获取,且角度不能超出限定范围。

这就会导致一个问题,由于我的得到的矩形长轴方向不是固定的,如果长轴是水平方向的,得到的矩形角度就在0°上下波动,如图红色区域部分:

如果长轴是竖直方向的,得到的矩形角度就在90°下或-90°上波动(因为- 90< angle <= 90,矩形垂直是90°。矩形区域逆时针旋转1°,并不是91°,而是-89°),如图红色区域部分:

所以,我通过计算矩形四个顶点,然后利用左上顶点与右下顶点的连线与X轴正方向的夹角来作为矩形的角度。具体算法如下:

一、求矩形四个顶点

gen_empty_obj (EmptyCross)smallest_rectangle2_xld (outContour, Row1, Column1, Phi3, Length1, Length2)gen_rectangle2_contour_xld (Rectangle, Row1, Column1, Phi3, Length1, Length2)tuple_cos (Phi3, Cos)tuple_sin (Phi3, Sin)dev_set_color('green')a:= -Length1*Cos - Length2*Sinb := -Length1*Sin + Length2*Cosgen_cross_contour_xld(Cross, Row1-b, Column1+a, 10, Phi3)concat_obj (EmptyCross, Cross, EmptyCross)c := Length1*Cos - Length2*Sind := Length1*Sin + Length2*Cosgen_cross_contour_xld(Cross, Row1-d, Column1+c, 10, Phi3)concat_obj (EmptyCross, Cross, EmptyCross)e:= Length1*Cos + Length2*Sinf := Length1*Sin - Length2*Cosgen_cross_contour_xld(Cross, Row1-f, Column1+e, 10, Phi3)concat_obj (EmptyCross, Cross, EmptyCross)g := -Length1*Cos + Length2*Sinh := -Length1*Sin - Length2*Cosgen_cross_contour_xld(Cross, Row1-h, Column1+g, 10, Phi3) concat_obj (EmptyCross, Cross, EmptyCross)

tips:这里将四个顶点以十字轮廓的形式保存在空对象EmptyCross内。

二、对矩形四个顶点进行排序并找到左上顶点和右下顶点

area_center_points_xld (EmptyCross, Area3, Row2, Column2)tuple_length (Column2, Length)for Index1 := 0 to Length-1 by 1for Index := 0 to Length-1 by 1if(Index<Length-1)if(Row2[Index]+Column2[Index]>Row2[Index+1]+Column2[Index+1])RowTemp := Row2[Index]ColumnTemp := Column2[Index]Row2[Index] := Row2[Index+1]Column2[Index] := Column2[Index+1]Row2[Index+1] := RowTempColumn2[Index+1] := ColumnTempendif endifendforendfor

tips:因为左上顶点的行、列坐标之和一定是最小的,右下顶点的行、列坐标之和一定是最大的,通过冒泡排序完成矩形四个顶点数组的排序。

三、计算矩形左上顶点和右下顶点连线与X轴正方向的夹角

offsetX := Column2[3] - Column2[0]offsetY := Row2[3] - Row2[0]tuple_atan2 (offsetY, offsetX, angel)tuple_deg (angel, angelDeg)RectAngel := 180 - angelDeg

tips:矩形左上顶点坐标(Row2[0],Column2[0]),右下顶点坐标(Row2[3],Column2[3])。

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。