我很难理解revecs
和tvecs
在cv2.calibrateCamera
的输出中的真实的含义。据我所知,它们共同定义了相机的姿势,意味着相机的位置和方向。
但是,如果我将从同一个相机拍摄的多个视图传递给cv2.calibrateCamera
,那么每个视图都会得到rvecs
和tvecs
。如果摄像机不动,它们不应该是一样的吗?
我的第一个图像的单应矩阵定义为
K = mtx
R = cv2.Rodrigues(rvecs[0])[0]
T = tvecs[0]
RT = np.concatenate((R,T),axis=1)
H = np.dot(K, RT)
我可以看到它的投影正确。我理解单应性的方式,它应该保持相同的每一个图像,因为相机不移动。但是,如果R,T在变化,H也会变化。
似乎我错过了一些非常重要的东西,关于在OpenCV中定义rvecs
和tvecs
的方式。
1条答案
按热度按时间zbsbpyhn1#
rvec
和tvec
允许将WORLD坐标系中的点Map到CAMERA坐标系。如果更改世界坐标系原点或方向(如果世界坐标系与棋盘对齐,并且棋盘在每帧中更改方向/位置,则可能会出现这种情况),那么即使摄影机没有物理更改位置,rvec
和tvec
也会更改。