我认为你的想法中缺少一些东西。
相机矩阵 K 和 dist。系数 D 是用于不失真的参数(如果您的镜头像鱼眼一样扭曲图像)。它们就是所谓的内在相机参数。
如果我们将术语从计算机视觉更改为计算机图形学,那么这些参数就是您用于定义视锥体的参数,例如,它们用于获取相机的焦距。
但它们不足以做投影的事情。
对于投影,如果您考虑计算机图形学术语(例如 opengl),则需要具有模型-视图-投影矩阵。模型矩阵是指定对象在世界中的位置的矩阵。视图矩阵指定相机的位置,投影矩阵指定平截头体(焦角、透视失真等)。
如果您想知道如何将模型的点从 3d 转换为 2d(反之亦然),您需要投影和视图矩阵(您拥有模型矩阵,因为您拥有要开始的 3d 点)。在计算机视觉中,视图矩阵称为 estrinsic 参数。
因此,您也需要 estrinsic 参数,即相机在世界中的位置。也就是说,例如,那些参数是rvec
需要tvec
的cv:: projectPoints
。
如果你想计算它们,它们正是cv::solvePnP
你想要做的相反的输出:从一些已知的 3d 点加上相机屏幕上已知的 2d 投影,这个函数给你 estrinsic 参数(您可以从中获取一些 opengl-opencv-augmented-reality-whatever 应用程序的视图矩阵cv::Rodrigues
)。
最后一点:虽然内在参数在您用相机拍摄的所有照片中都是固定的(当然您不改变焦距),但每次移动相机以从不同位置拍摄新照片时,内在参数都会发生变化视点(即:这改变了视角,所以你要找的3D-2D投影)
希望能帮上忙!