我认为你的思想中有某种缺失。
相机矩阵K和dist。系数D是使失真保持不变的参数(如果镜头像鱼眼一样扭曲图像)。它们就是所谓的内在摄像机参数。
如果我们将术语从计算机视觉更改为计算机图形,那么这些参数就是用于定义视锥的那些参数,例如它们用于获取相机的焦距。
但他们不足以做投影的东西。
对于投影,如果您认为在计算机图形学术语(例如opengl)中需要模型视图投影矩阵。模型矩阵是指定对象在世界中的位置的矩阵。视图矩阵指定相机的位置,投影矩阵指定平截头体(焦点角度,透视失真等)。
如果您想知道如何将模型中的点从3d转换为2d(或反之亦然),您需要投影和视图矩阵(您有模型矩阵,因为您有要从中选择的3d点开始)。而在计算机视觉中,视图矩阵被称为estrinsic参数。
所以,你也需要estrinsic参数,也就是相机在世界上的位置。也就是说,例如,那些参数是cv:: projectPoints
需要的rvec
和tvec
。
如果你想计算它们,它们正好是cv::solvePnP
的输出,它与你想要做的相反:从一些已知的3d点加上摄像机屏幕上已知的2D投影,该函数给出你的estrinsic参数(从中你可以通过cv::Rodrigues
获得opengl-opencv-augmented-reality-any应用的视图矩阵)。
最后一点:虽然在用相机拍摄的所有照片中固定的内在参数是固定的(当然您并不改变焦距),但每次移动相机拍摄新照片时,estrinisc参数都会发生变化从不同的角度看图片(即:这改变了透视的角度,所以你想找到的3D-2D投影)
希望能帮上忙!
什么新东西?它有帮助吗? – nkint