opencv - 从视差图中获取真实深度

标签 opencv computer-vision stereo-3d

我想从立体相机获取物体的真实距离。我正在使用 Learning OpenCV O'Reilly 书中给出的 OpenCV 示例代码。获得视差图后我想使用公式:

distance = focal_length * baseline distance/disparity

问题是:

  1. 我得到的差异为负值。如何转换这些值以便在实际深度计算中使用它们?

  2. 在上面的公式中,焦距和基线距离以毫米为单位(由重投影矩阵返回),而视差以像素为单位。所以结果将以 mm^2/像素为单位。如何将视差值从像素转换为毫米。

最佳答案

您需要执行一个 camera calibration 第一步,获取合适的参数,称为相机矩阵

有了这些值,您就可以对 disparity map 进行适当的计算 使用校正值(从相机校准步骤获得的值,称为重新映射不失真),然后获得真实深度(以毫米或米),你终于可以做到:

depth = baseline * focal / disparity

关于opencv - 从视差图中获取真实深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23039961/

相关文章:

python - <unknown> 不是 numpy 数组错误

python - 在 OpenCV 中使用 StereoBM 的错误视差图

opencv - 在立体相机中找到右图像上对应的 2d 点

image - 如何从图像中删除所有线条? (水平、垂直、对角线)

c++ - 使用 OpenCV 的对象跟踪脚本中的慢速视频

machine-learning - tensorflow 中的激活函数有区别吗? tf.nn.tanh 与 tf.tanh

opencv - StereoSGBM中如何定义参数 'numDisparities'?

使用 Python OpenCV 进行图像重复模式检测

python - 获取图像中垂直线的边缘/线

python - 卷积算法的简单实现