【问题标题】:Estimating rotation angles from camera calibration of opencv从opencv的相机校准估计旋转角度
【发布时间】:2016-05-27 02:19:38
【问题描述】:

我一直无法理解 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 旋转是从图像坐标系到物体坐标系。这可能是一个原因吗?

【问题讨论】:

    标签: java opencv


    【解决方案1】:

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

    通常,这很容易检查:

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

    【讨论】:

    • 1) 我检查了我为 openCV 校准函数提供输入的顺序。如手册中所述,我首先给出对象点,然后给出图像点。所以输入的顺序应该不是问题。通过输入的顺序:`Calib3d.calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distortionCoefficients, rvecs, tvecs,mFlags); ` 2) 如果我使用返回的旋转向量、平移和内在函数使用 Calib3d.projectPoints 重新投影角,它们匹配得非常好。有什么指点吗?
    猜你喜欢
    • 2018-07-12
    • 2013-01-28
    • 2014-10-23
    • 1970-01-01
    • 2012-04-18
    • 2016-12-29
    • 2011-08-03
    • 2013-02-24
    • 2015-01-07
    相关资源
    最近更新 更多