我使用SURF算法比较物体之间的地标,我想知道如何检测两张照片之间的旋转角度。我已经看到另一个question非常相似。这个问题被拒绝是一种实现结果的天真方式。但是通过这种方法仍然可以实现结果。
所以我的问题仍然是,如何使用OpenCV的SURF算法(C ++ please)检测两个图像之间角度方向的差异。
我正在使用的代码可以在opencv tutorial pages找到。
答案 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 ++转换上述代码。