OpenCV:如何从 basebaserateCamera() 输出中查找投影矩阵



我能够使用Python中的OpenCV计算相机校准。但是,我真正需要的是投影矩阵。查看文档中的方程,看起来这是P = K[R|T]其中 K 是内禀矩阵,R 是旋转矩阵,T 是平移向量。这是我为计算投影矩阵而编写的代码:

ret, matrix, distCoef, rvecs, tvecs = cv2.calibrateCamera([world_points], [corners], gray.shape[::-1], flags=cv2.CALIB_USE_INTRINSIC_GUESS)
K = matrix
R = cv2.Rodrigues(rvecs[0])[0]
T = tvecs[0]
RT = np.concatenate((R,T),axis=1)
P = np.dot(K, RT)

这是对的吗?据我了解,我应该能够通过执行 P * [x; y; z; 1] 来检查它,其中 (x,y,z) 是一个世界点,输出应该是相应的像素坐标。我试过这个,但输出看起来很错误。这是否意味着校准错误,还是我构造了错误的P?

我想

我修复了它 - 事实证明,我给出了一些错误的参数来校准Camera()。我主要根据 OpenCV 示例文件夹附带的 calibrate.py 重写了代码。我遵循了我在原始帖子中提到的其余概念(构造 P、检查重投影误差等),它现在给了我更合理的结果。

最新更新