估计opencv相机校准的旋转角度

时间:2016-05-26 14:45:20

标签: java opencv

我一直无法理解opencv的Calib3d.calibrateCamera()函数给出的旋转向量。 为了理解函数的返回值,我尝试了以下步骤。

我首先用Java生成了棋盘图案。然后我应用了15个旋转矢量和15个平移矢量。我还应用了一个代表相机内在矩阵的已知矩阵。我基本上试图重新制作拍摄国际象棋的许多照片的手动过程。我创建的一些图像如下所示: One of the images I generated with identified corners

生成图像后,我通过角点识别和摄像机校准功能运行它们。我找回了几乎完全从校准函数中使用的内在矩阵。

当我比较用于生成图像的旋转矢量和从校准函数返回的矢量时,它们是彼此的负数。比较图如下所示:

Comparing input and output Rotation value about x axis

这是正常行为还是我做错了什么?

answer at表示opencv旋转是从图像坐标系到对象坐标系。这可能是个原因吗?

1 个答案:

答案 0 :(得分:0)

如果预期和实际旋转矢量彼此相反,则意味着预期和实际旋转矩阵是彼此相反的。因此,您可能会混淆源和目标坐标系。

通常,这很容易检查:

  1. 将[R | t]矩阵应用于与图案角对应的3D点
  2. 使用内在矩阵
  3. 在图像中投影它们
  4. 检查角投影与图像中观察到的值是否一致。如果它们不一致,请使用反向旋转矩阵尝试相同的操作。