图像旋转角度计算:两点对齐需求下atan2函数结果异常排查
求正确计算图像旋转角度的方法,使两点水平对齐
我现在有一张包含眼睛标记的图像:
我的需求是旋转这张图像,让图中两个眼睛的最低点处于同一水平线上,但我始终没法算出正确的旋转角度,也不确定问题出在哪。
我尝试过用atan2函数计算角度,但得到的结果不管是在自定义旋转函数里测试,还是用Photoshop验证,都达不到预期效果。
我取的两个点坐标和计算结果如下:
pt1 = {X = 421 Y = 350} pt2 = {X = 241 Y = 325} angle = -3.0035866299322738 (通过某个回答里提到的atan2函数计算得出)
用这个角度旋转后的图像效果如下:
按预期,旋转后图中的绿色线条应该完全水平,但实际并非如此。我怀疑是自己的旋转代码有问题,以下是我写的VB.NET旋转函数:
Public Function RotateImage(ByVal uBmp As Bitmap, ByVal uAngle As Double) As Bitmap ' 创建新的空位图用于存放旋转后的图像 Dim nBmp As Bitmap = New Bitmap(uBmp.Width, uBmp.Height) nBmp.SetResolution(uBmp.HorizontalResolution, uBmp.VerticalResolution) ' 从空位图创建绘图对象 Using g As Graphics = Graphics.FromImage(nBmp) ' 将旋转原点设置为图像中心 g.TranslateTransform(uBmp.Width \ 2, uBmp.Height \ 2) ' 执行旋转 g.RotateTransform(uAngle) g.TranslateTransform(-uBmp.Width \ 2, -uBmp.Height \ 2) ' 将传入的图像绘制到绘图对象上 g.DrawImage(uBmp, New PointF(0, 0)) End Using Return nBmp End Function
为了排查atan2的问题,我做了一个简单测试:用在线工具绘制了两个点,pt1在(0,0),pt2在(120,33),工具显示对应的角度是15°,但atan2返回的结果是angle = 0.26836621090590684,我想知道怎么把这个弧度值转换成对应的15度?
内容的提问来源于stack exchange,提问作者tmighty
相关产品推荐
相关产品推荐

