OpenCV项目:将3D坐标转换为2D相机坐标

7
我有一个物体的3D世界坐标,想要得到它在相机2D平面上的坐标。我已经使用cv::calibrateCamera对相机进行了校准,因此我拥有相机矩阵和畸变系数。为了将3D点投影到2D相机坐标,我使用cv::projectPoints。文档中写道:

void projectPoints(InputArray objectPoints, InputArray rvec, InputArray tvec, InputArray cameraMatrix, InputArray distCoeffs, OutputArray imagePoints, OutputArray jacobian=noArray(), double aspectRatio=0 )

我该如何获取rvec / tvec并且我的方法正确吗?calibrateCamera会给出rvecstvecs,但它们是针对每个输入的棋盘图像的,并且我猜想它们是棋盘的旋转和平移,而不是相机的。

但是我为什么需要这些翻译/旋转矩阵呢?只使用相机(=投影?)矩阵不行吗? - black
相机矩阵只包含内部参数,如焦距,而不包括外部参数,即相机的旋转和平移。 - sietschie
1
好的,我理解了。在投影矩阵p中,既有内参也有外参参数,是吗?因此理论上,我只需要将p与齐次三维坐标相乘,就可以得到我的点的二维齐次坐标,对吗?这方面OpenCV有相应的函数吗? - black
2
如果您有这样的矩阵,您不需要一个函数来完成此操作。只需将您的点与矩阵相乘,并将结果除以其第三个条目即可。当然,这并不考虑扭曲。但是,为了使其正常工作,您需要从您的世界坐标系到相机坐标系的转换。而且,您已经说明了您只有对棋盘进行变换的转换。 - sietschie
移动相机或移动棋盘是等效的(反向)。选择任何一个校准值。您的选择仅影响坐标系! - Micka
显示剩余4条评论
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接