为什么OpenCV的calibratecamera中的每个视图的rvec和tvec都不同?

2vuwiymt  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(162)

我很难理解revecstvecscv2.calibrateCamera的输出中的真实的含义。据我所知,它们共同定义了相机的姿势,意味着相机的位置和方向。
但是,如果我将从同一个相机拍摄的多个视图传递给cv2.calibrateCamera,那么每个视图都会得到rvecstvecs。如果摄像机不动,它们不应该是一样的吗?
我的第一个图像的单应矩阵定义为

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中定义rvecstvecs的方式。

zbsbpyhn

zbsbpyhn1#

rvectvec允许将WORLD坐标系中的点Map到CAMERA坐标系。如果更改世界坐标系原点或方向(如果世界坐标系与棋盘对齐,并且棋盘在每帧中更改方向/位置,则可能会出现这种情况),那么即使摄影机没有物理更改位置,rvectvec也会更改。

相关问题