You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图像旋转角度计算:两点对齐需求下atan2函数结果异常排查

求正确计算图像旋转角度的方法,使两点水平对齐

我现在有一张包含眼睛标记的图像:
包含眼睛标记的原始图像

我的需求是旋转这张图像,让图中两个眼睛的最低点处于同一水平线上,但我始终没法算出正确的旋转角度,也不确定问题出在哪。

我尝试过用atan2函数计算角度,但得到的结果不管是在自定义旋转函数里测试,还是用Photoshop验证,都达不到预期效果。

我取的两个点坐标和计算结果如下:

pt1 = {X = 421 Y = 350} pt2 = {X = 241 Y = 325} 
angle = -3.0035866299322738 (通过某个回答里提到的atan2函数计算得出)

用这个角度旋转后的图像效果如下:
使用-3度旋转后的图像

按预期,旋转后图中的绿色线条应该完全水平,但实际并非如此。我怀疑是自己的旋转代码有问题,以下是我写的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:42