Opencv 二维坐标到三维世界坐标
我想将2D图像坐标转换为3D世界坐标。我使用的是ZED相机,它是一款立体相机,附带的sdk提供了视差图。因此我有深度。这两台摄像机彼此平行。虽然这个问题本质上很琐碎,但我无法理解转换背后的数学原理。我有以下资料 1) 我有像素信息(即,由u和v表示的行和列编号)以及该像素处的深度D(以米为单位) 2) 我还知道两台相机的焦距和cx,cy值 3) 两个投影中心B(基线)之间的距离已知 我想知道如何从图像中的像素(行、列、深度)转换到世界坐标中的像素(X、Y、Z) 假设世界坐标系的原点为两个摄影机之间的中心点,并垂直位于地面下方。(相机的高度称为H)Opencv 二维坐标到三维世界坐标,opencv,computer-vision,Opencv,Computer Vision,我想将2D图像坐标转换为3D世界坐标。我使用的是ZED相机,它是一款立体相机,附带的sdk提供了视差图。因此我有深度。这两台摄像机彼此平行。虽然这个问题本质上很琐碎,但我无法理解转换背后的数学原理。我有以下资料 1) 我有像素信息(即,由u和v表示的行和列编号)以及该像素处的深度D(以米为单位) 2) 我还知道两台相机的焦距和cx,cy值 3) 两个投影中心B(基线)之间的距离已知 我想知道如何从图像中的像素(行、列、深度)转换到世界坐标中的像素(X、Y、Z) 假设世界坐标系的原点为两个摄影机之
谢谢。因为您已经知道每个像素的深度D(以米为单位),所以不需要相机之间的基线B(需要从视差值计算深度)。事实上,D已经是搜索到的Z坐标 针孔相机模型的一般公式(假设没有失真)为: 因此,计算3D坐标就很简单了:
X = Z / fx * (u - cx)
Y = Z / fy * (v - cy)
[Z = D]
请注意,这仅在处理校正图像(或低失真图像)时才正确。刚刚偶然发现这一点。我也在使用ZED相机 仅供有兴趣的朋友参考,ZED API(SDK v.1.2)提供了一个很好的功能: 您只需使用以下命令检索图像上所有点的XYZ贴图:
sl::zed::Mat xyz=zed->retrieveMeasure(sl::zed::XYZABGR)代码>
请注意,确定这是否是您想要的,但肯定是一些有用的东西:)
X = Z / fx * (u - cx)
Y = Z / fy * (v - cy)
[Z = D]