Halcon 关于角度问题的总结
Halcon处理中有很多关于角度计算的问题,有时候会莫名其妙的出现和想象不一致的问题,简单的问题很好排查,但有的问题需要理解透原理,才能解决问题。因此为了避免有同样问题的你踩坑,将我填过的坑分享给大家,希望对你有所帮助。
关于Halcon角度问题还有很多,这篇博客后期会持续更新。如果大家有疑问或者有更好的心得,希望共同探讨交流。
一、旋转角度问题
Halcon中顺时针旋转为负,逆时针旋转为正。
以红色线条为基准,顺时针旋转45度(白色线条),逆时针旋转45度(绿色线条)。
代码:
* 生成矩形的中心点以及角度
RecRow := 300
RecCol := 300
RecAngle := rad(0)
* 生成一个矩形
gen_rectangle2 (rectangle, RecRow, RecCol, RecAngle, 100, 1)
* 仿射变换偏移角度(旋转角度45度)
set_color (200000, 'green')
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, rad(45), RecRow, RecCol, HomMat2DRotate)
affine_trans_region (rectangle, RegionAffineTransP, HomMat2DRotate, 'nearest_neighbor')
* 仿射变换偏移角度(旋转角度-45度)
set_color (200000, 'white')
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, rad(-45), RecRow, RecCol, HomMat2DRotate)
affine_trans_region (rectangle, RegionAffineTransN, HomMat2DRotate, 'nearest_neighbor')
二、算子gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )角度问题
输入参数Phi为弧度制,1度对应的弧度为0.0174533,1弧度对应角度为57.2958度。正常情况下大家喜欢用角度来描述旋转度数,因为角度更直观,符合正常思维。但如果直接用角度赋值Phi,效果会超出的你的想象,因为这个算子你给的值它默认为弧度,所以,如果想用角度来表示更直观,需要将角度转换为弧度,只需要rad(angle)转换一下即可。
算子gen_rectangle2角度范围为- 90 < angle <= 90,如果强制给的角度超出这个范围,程序也不会报错。事实上Halcon内部将你给的超出范围的角度转换到这个范围。
三、算子smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)角度问题
1、首先 角度范围- 90< angle <= 90,无论通过算子gen_rectangle2生成的Region角度多大,smallest_rectangle2获取的角度都不会超出这个范围。
2、算子smallest_rectangle2输出的角度是通过计算Region长轴与X轴正方向夹角获取,且角度不能超出限定范围。
四、Halcon卡尺角度问题
关于卡尺的介绍,请参考我前面的博客内容https://blog.csdn.net/qq_18620653/article/details/106194813,这里不再描述。关于角度描述如下: