有没有人可以使用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
任何人都可以帮我吗?
答案 0 :(得分:1)
Essential矩阵不能用于描述纯旋转。如果您知道图像只与没有平移的旋转有关,那么您必须估计它们之间的单应性(即投影变换)。