OpenCV(C++)-从已知的3D对象和相机位置计算图像的2D坐标

OpenCV(C++)-从已知的3D对象和相机位置计算图像的2D坐标,c++,opencv,camera,C++,Opencv,Camera,因此,我已经知道3D摄像机的位置,以及物体在世界帧中的位置和大小,以及摄像机矩阵和先前摄像机标定的畸变系数 我需要计算出物体的二维图像坐标。假设这个物体是一个球体,它的世界位置为objPos,半径为objRad,所以我想找到的坐标是一个图像位置为imgPos,半径为imgRad的圆 我该怎么做呢 Cheers在OpenCV中存在一个函数,用于在相机图像上投影3D坐标-我认为您已经具备了调用此函数所需的所有功能。理由如下: 要投影的三维坐标 摄像机的旋转-rvec 摄像机的位置-tvec 摄像机矩

因此,我已经知道3D摄像机的位置,以及物体在世界帧中的位置和大小,以及摄像机矩阵和先前摄像机标定的畸变系数

我需要计算出物体的二维图像坐标。假设这个物体是一个球体,它的世界位置为objPos,半径为objRad,所以我想找到的坐标是一个图像位置为imgPos,半径为imgRad的圆

我该怎么做呢


Cheers

在OpenCV中存在一个函数,用于在相机图像上投影3D坐标-我认为您已经具备了调用此函数所需的所有功能。理由如下:

要投影的三维坐标 摄像机的旋转-rvec 摄像机的位置-tvec 摄像机矩阵-根据您的校准 摄像机畸变系数-根据您的校准 生成的二维图像坐标 如果您有4x4矩阵形式的外部相机参数,则必须从中提取rvec和tvec


来看看你的例子:我会生成这样一个球体的3D坐标,并带有相应的半径。在下一步中,我将使用上述方法投影这些三维坐标。

您需要更多的东西,您需要用于投影的摄影机矩阵,您需要外部,即从模型坐标系到摄影机坐标系的平移和旋转。然后你将投影点。。。位置易于计算,但半径并非如此简单,除非投影球体的每个点,或投影到垂直于球体的图像平面。