【问题标题】:Unable to understand Opencv inbuilt calibrateCamera function无法理解 Opencv 内置的 calibrateCamera 功能
【发布时间】:2023-03-04 18:18:01
【问题描述】:

我正在使用内置函数 calibrateCamera 中的 opencv 校准相机。

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
print("translation vector size",len(tvecs))
print("rotation vector size",len(rvecs))
print("translation \n",tvecs)
print("rotation \n",rvecs)

输出:

translation vector size 8
rotation vector size 8
translation 
 [array([[-2.89545711],
       [ 0.53309405],
       [16.90937607]]), array([[ 2.5887548 ],
       [ 4.28267707],
       [13.76961517]]), array([[-3.3813951 ],
       [ 0.46023276],
       [11.62316805]]), array([[-3.94407341],
       [ 2.24712782],
       [12.75758635]]), array([[-2.46697627],
       [-3.45827811],
       [12.90925656]]), array([[ 2.26913044],
       [-3.25178618],
       [15.65704473]]), array([[-3.65842398],
       [-4.35145288],
       [17.28001749]]), array([[-1.53432042],
       [-4.34836431],
       [14.06280739]])]
rotation 
 [array([[-0.08450996],
       [ 0.35247622],
       [-1.54211812]]), array([[-0.23013064],
       [ 1.02133593],
       [-2.79358726]]), array([[-0.34782976],
       [-0.06411541],
       [-1.20030736]]), array([[-0.27641699],
       [ 0.10465832],
       [-1.56231228]]), array([[-0.47298366],
       [ 0.09331131],
       [-0.22505762]]), array([[0.068391  ],
       [0.44710268],
       [0.10818745]]), array([[-0.09848595],
       [ 0.32272789],
       [ 0.31561383]]), array([[-0.35190574],
       [ 0.24381052],
       [ 0.2106984 ]])]

获得的平移和旋转向量由八个 3*1 数组对象组成。我希望平移和旋转向量的大小分别为 3*3 和 3*1。请让我知道这些值如何与平移和旋转矩阵相关。还建议我如何从这些获得的向量中推导出平移和旋转矩阵。

谢谢!

【问题讨论】:

    标签: opencv computer-vision camera-calibration 3d-reconstruction


    【解决方案1】:

    八组数组就是你输入的八张图片。

    您从 calibrateCamera() 获得的 tvecs 和 rvecs 是向量。如果你想要矩阵形式,你必须使用 Rodrigues()。

    3x1 平移向量是您想要的。

    通过cv2.Rodrigues()可以得到3x3的旋转矩阵。

    for rvec in rvecs
        R_matrix, _ = cv2.Rodrigues(rvecs)
    

    另外,如果你想连接 [R t] 矩阵,试试这个:

    Rt_matirx = np.concatenate((R_matrix, tvec), axis=1)
    

    请参阅opencv document 了解更多信息。

    【讨论】:

    • 谢谢。对于翻译向量是有意义的。但是对于旋转向量,你能给我更多的解释吗?
    • 旋转向量中的单个物体3*1旋转数组表示yaw pitch roll?
    • 我认为是。检查cv2.Rodrigues()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2015-09-11
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多