我可以使用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; Ÿ; Z者除外; 1]其中(x,y,z)是世界点,输出应该是相应的像素坐标。我试过这个,但输出看起来非常错误。这是否意味着它是一个糟糕的校准,还是我错误地构造了P?
答案 0 :(得分:-1)
我想我修好了 - 事实证明,我给了calibrateCamera()一些不好的参数。我在很大程度上基于OpenCV示例文件夹附带的calibrate.py重写了代码。我遵循了我在原帖中提到的其余概念(构建P,检查重投影错误等),现在它给了我更多合理的结果。