求二维与三维坐标的转换

2024-05-16 22:57:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是在图像中找到物体。在

object1

并将二维坐标(x,y)从相机转换为机械臂的三维坐标。现在我可以用我的opencv python代码找到二维坐标,用我的教学方法从机器人程序中找到三维坐标,但原点不同。但是,我用来将二维坐标转换为三维坐标的方法仍然是错误的。因为机械臂和相机的原点不是同一点。所以我想问一下,如果原点不一样,我应该用什么公式/代码将二维坐标(x,y)转换为三维坐标(x,y,z)。在


Tags: 方法代码图像程序错误机器人opencv物体
2条回答

假设:

  • 您可以找到以相机为中心的三维坐标
  • 你知道相机“原点”相对于手臂的坐标
  • 你知道相机的坐标系相对于手臂坐标系中的给定轴旋转了多少度。在
  • 你需要获得手臂中心的坐标。在

您只需要应用一个名为旋转平移的刚性变换。 为了简化下面的示例代码,我们还假设两个坐标系的Z轴彼此平行,垂直于“table”,并且具有相同的方向。所以,唯一可能的旋转是围绕Z轴。在

x, y, z = get_3d(x, y)

x -= camera_origin_x_in_arm_coord_system
y -= camera_origin_y_in_arm_coord_system
z -= camera_origin_z_in_arm_coord_system

arm_x = x*cos(theta) - y*sin(theta)
arm_y = x*sin(theta) + y*cos(theta)
arm_z = z

对于更复杂的旋转,请参考this question的答案。在

您需要将点转换为另一个坐标系。在

如果你计算出转换矩阵,你可以用 cv.transform()方法。在

你也可以自己计算:

point3d`=RotationMatrix*(point3d-TranslationVector)

平移向量和旋转矩阵这是你手臂的外部参数

相关问题 更多 >