首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找二维和三维坐标之间的平移

查找二维和三维坐标之间的平移
EN

Stack Overflow用户
提问于 2018-07-06 16:14:45
回答 2查看 579关注 0票数 0

我有一项任务是在图像中查找对象。

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

EN

回答 2

Stack Overflow用户

发布于 2018-07-06 16:54:21

假设:

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

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

代码语言:javascript
运行
复制
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的答案。

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 19:55:02

您需要将点转换到另一个坐标系中。

如果你以某种方式计算变换矩阵,你可以使用cv.transform()方法。

你也可以计算你自己:

point3d` = RotationMatrix * (point3d - TranslationVector)

TranslationVector和RotationMatrix它是arm的外部参数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51205858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档