在Opencv中校准后查找点世界坐标

Posted

技术标签:

【中文标题】在Opencv中校准后查找点世界坐标【英文标题】:Find point world coordinates after calibration in Opencv 【发布时间】:2012-09-10 13:19:18 【问题描述】:

OpenCV 有没有这样的功能:

图像平面中标记的坐标 外在参数 内在参数 z坐标(marker和cam之间的距离,因为我用的是传感器kinect)

提供marker对应的世界坐标?

非常感谢任何帮助。谢谢!

【问题讨论】:

外部参数表示相机相对于某个参考的位置。你知道世界坐标中点和参考点之间的距离吗? 是的,我使用 kinect 传感器(我知道 z 坐标)。我的问题是,OpenCv 中是否有自动转换的函数? 您需要提供更具体的列表,列出您所知道的。如果您知道所讨论点的 z 坐标,那么您知道的不仅仅是“图像平面中点的坐标”。你对这一点了解多少?它相对于原点的位置?它相对于相机的位置?等等。 看看编辑,谢谢 【参考方案1】:

要找到标记的世界坐标,您需要它相对于相机的坐标。如果您知道相机相对于原点的姿势 P 和相对于相机的标记姿势 M,要获得相对于原点的标记姿势,只需将它们相乘即可

final = [P]*[M]

听起来你只是在努力寻找 M。你需要做的就是将你的位置乘以相机矩阵的倒数,然后乘以你的 Z 坐标。

Z*cam_mat.inv()*[x_image,y_image,1] = [x_world,y_world,z_world]

M = [1,0,0,x_world,
     0,1,0,y_world,
     0,0,1,z_world,
     0,0,0,1]

【讨论】:

那么,我是否假设凸轮和标记系统坐标具有相同的方向?但是 x_w、y_w 和 z_w 的标记翻译是否尊重 cam? 如果你只有1个点,那么你无法确定点的方向。您是否有多个可以从中得出方向的点?是的,x_w、y_w 和 z_w 都适用于相机。 那么,如果我还想要对象的方向(尊重世界坐标),我必须使用更多标记还是一个复杂标记? 是的,点仅在位置定义。仿射变换可以用 3 个点定义,透视变换可以用 4 个点定义 谢谢,我会尝试更多关于对象方向的信息

以上是关于在Opencv中校准后查找点世界坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenCV 中计算点的 3D 坐标

电影坐标到世界坐标

不使用 cv2.findChessboardCorners 在 Python 中校准 OpenCV 相机

计算 3D 世界点

opencv相机校准object_points方向

OpenCV每日函数 相机校准calibrateCamera函数