openCV 3.0 recoverPose错误的结果

时间:2015-03-02 14:39:40

标签: opencv

有没有人可以使用openCV 3.0 recoverPose功能并获得良好的效果? 我有:

cv::Mat r;
cv::Mat t;
cv::Mat E = cv::findEssentialMat(features1, features2);
cv::recoverPose(E, features1, features1, r, t);

float xAngle = radToDeg(atan2f(r.at<float>(2, 1), r.at<float>(2, 2)));
float yAngle = radToDeg(atan2f(-r.at<float>(2, 0), sqrtf(r.at<float>(2, 1) * r.at<float>(2, 1) + r.at<float>(2, 2) * r.at<float>(2, 2))));
float zAngle = radToDeg(atan2f(r.at<float>(1, 0), r.at<float>(0, 0)));

作为输入,我使用一个图像1836x1836尺寸和另一个图像1836x1836,它只是向左旋转90度。我已经使用计算机程序旋转它,所以它正好旋转90度。

我期待结果:

xAngle: 0

yAngle: 0

zAngle: 90 (or -90 depending on Z direction)

不幸的是我的结果是:

xAngle: 90

yAngle: 0.113659

zAngle: 180

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:1)

Essential矩阵不能用于描述纯旋转。如果您知道图像只与没有平移的旋转有关,那么您必须估计它们之间的单应性(即投影变换)。