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

时间:2014-06-04 05:27:34

标签: c++ opencv surf

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

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

我正在使用的代码可以在opencv tutorial pages找到。

2 个答案:

答案 0 :(得分:4)

我认为,一旦得到单应矩阵H,就可以将其分解为其组成矩阵:平移,旋转和缩放。 Here就是一个例子

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

答案 1 :(得分:0)

这就是我使用EmguCv(.NET包装器到OpenCV)和&amp ;; 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 ++转换上述代码。