【问题标题】:How to calculate OpenCV camera projectionMatrix in python如何在 python 中计算 OpenCV 相机投影矩阵
【发布时间】:2017-04-28 22:00:20
【问题描述】:

我正在尝试使用 Python 2.7 中的 OpenCV 2.4 为我的相机计算投影矩阵(我正在使用 ps eye)。我需要它用于 cv2.triangulatePoints()。我已经使用 cv2.calibrateCamera() 进行了校准(使用 OpenCV 示例中的 calibrate.py),所以我有 rms、camera_matrix、dist_coefs、rvecs 和 tvecs。

但我实际上从这些参数计算投影矩阵时遇到了问题(我没有在网上找到任何 Python 示例)。

PS:我必须校准每个 ps eye 相机吗?我有 3 个,我想在 3D 空间中跟踪对象。

【问题讨论】:

标签: python opencv triangulation projection-matrix


【解决方案1】:

如果你只有一台相机,投影矩阵应该等于camera_matrix。只有一种并发症。

cv2.triangulatePoints 被定义为使用来自 2 个不同相机的 2 个视图。

文档还指出

该函数重建 3 维点(在齐次 坐标)通过使用他们的立体相机观察。 投影矩阵可以从 stereoRectify() 获得。

所以,是的,您必须校准每个摄像头并校准每一对摄像头,以便检索每个摄像头矩阵、旋转矩阵以及从一个摄像头到“主摄像头”的平移向量。

对于给定的相机,K1 和 K2 是相机矩阵,确实

主相机(相机为世界参考系)的投影矩阵为

P1 = K1*[I | z]

其中 I 是恒等矩阵,z 是第四列中的 0,0,0 向量。 你可以这样想

  1 0 0 0
  0 1 0 0 
  0 0 1 0

如果R是2个相机之间的旋转矩阵,t是两个相机之间的距离,第二个投影矩阵是

P2 = K2*[R | t]

在 python 中,如果您无法从 stereoRectify 获取矩阵,一种手动完成的方法是

import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)

【讨论】:

  • 你的意思是 P2 = K1*[R | t] 对于第二个矩阵?这更有意义。
  • @gregorkas 是的,这是我的错。在第二个矩阵中,1 索引应该是 2:错误类型。谢谢!已编辑。
猜你喜欢
  • 1970-01-01
  • 2015-04-11
  • 2018-10-19
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2020-10-22
相关资源
最近更新 更多