opencv - 无法理解 Opencv 内置的 calibrateCamera 功能
问题描述
我在内置函数 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。请让我知道这些值如何与平移和旋转矩阵相关。还建议我如何从这些获得的向量中导出平移和旋转矩阵。
谢谢 !
解决方案
这八组数组是您输入的八张图像。
从 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 文档。
推荐阅读
- php - 带有 Doctrine 和 find() 的 PHPStan - 无法解析模板类型 T
- ruby-on-rails - 用于动态嵌套属性形式的 Rails 和 Stimulus
- visual-studio-code - 更改 VSCode 设置而不更新 settings.json(即仅用于会话)
- pandas - Plotly:如何在一个图中制作组和堆栈条子图?
- python - 在 Python 中使用均方误差的梯度下降解决方案发散到无穷大
- patch - Chocolatey:回滚到基本版本很棘手
- google-bigquery - 即使在我的 Express 应用程序中安装了 CORS,我的 Web 应用程序仍被 CORS 策略阻止
- jenkins - 我无法安全重启詹金斯
- global-variables - 两个数组之间的最大异或 | 特里
- python - ubuntu (AWS) 中的 crontab