OpenCV SURF -获得两个图像之间的旋转角度

OpenCV SURF - Get Rotation angle between two images

本文关键字:之间 图像 两个 旋转 SURF OpenCV      更新时间:2023-10-16

我正在使用SURF算法来比较物体之间的地标,我想知道如何检测两张图片之间的旋转角度。我已经看到了另一个问题非常相似。这个问题被拒绝了,因为它是达到结果的一种天真的方法。但结果仍然可以通过这种方法实现。

所以我的问题仍然存在,如何使用OpenCV的SURF算法(请使用c++)来检测两个图像之间的角度方向差异。。

我使用的代码可以从opencv教程页面找到。

我认为,一旦你得到了单性矩阵H,你就可以把它分解成它的组成矩阵:平移,旋转和缩放。下面是一个例子

我建议你阅读这个有用的教程:https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

这就是我使用EmguCv(。. NET包装器到OpenCV) &c#。

一旦你得到了单应矩阵,你就可以用RotatedRect对象得到旋转角度。

System.Drawing.Rectangle rect = new System.Drawing.Rectangle(Point.Empty, modelImage.Size);
PointF[] pts = new PointF[]
{
  new PointF(rect.Left, rect.Bottom),
  new PointF(rect.Right, rect.Bottom),
  new PointF(rect.Right, rect.Top),
  new PointF(rect.Left, rect.Top)
};
pts = CvInvoke.PerspectiveTransform(pts, homography);
RotatedRect IdentifiedImage = CvInvoke.MinAreaRect(pts);
result.RotationAngle = IdentifiedImage.Angle;

以上代码可以在c++中转换