opencv - 2D坐标到3D世界坐标

标签 opencv computer-vision

我想将 2D 图像坐标转换为 3D 世界坐标。我正在使用 ZED 相机,它是一个立体相机,它附带的 sdk 提供视差图。因此我有深度。两个相机彼此平行。虽然这个问题很简单,但我无法弄清楚转换背后的数学原理。我有以下信息

1) 我有像素信息(即由 u 和 v 表示的行号和列号)和该像素的深度 D(以米为单位)。

2)我也知道两个相机的焦距和cx,cy值

3) 两个投影中心B(baseline)之间的距离已知。

我想知道如何从图像中的像素(行、列、深度)到世界坐标中的(X、Y、Z)。

假设世界坐标系的原点是两个相机之间的中心点,垂直于地面。 (相机的高度称为 H)。

谢谢。

最佳答案

由于您已经知道每个像素的深度 D(以米为单位),因此您不需要相机之间的基线 B(您需要通过视差值计算深度)。事实上,D 已经是您搜索到的 Z 坐标。

针孔相机模型的通用公式(假设没有畸变)为:

u = fx * (X / Z) + cx
v = fy * (Y / Z) + cy

因此可以直接计算 3D 坐标:

X = Z / fx * (u - cx)
Y = Z / fy * (v - cy)
[Z = D]

请注意,只有在处理经过校正的图像(或低失真图像)时,这才是正确的。

关于opencv - 2D坐标到3D世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909696/

相关文章:

python - 从字节读取视频

python - CNN 使用具有显着尺寸差异的图像

matlab - 如何找到具有负值的索引并将该值替换为最接近的正值索引值?

OpenCV 按位与+掩码

c# - 未找到 EmguCV DLL 异常 - 无法找到 cvextern?

python-2.7 - Python 2.7 Opencv 错误,ImportError : DLL load failed: The specified module could not be found

python - 你如何设置 cv.CreateVideoWriter 的帧大小

python - 运行时错误 : view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces)

android - 在 Android OpenCV 中设置关键点数

python - 为图像对比度度量实现直方图扩展