You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

立体视觉中视差缩放1/16的原因——基于OpenCV StereoSGBM代码

关于OpenCV StereoSGBM视差结果缩放1/16的疑问

问题背景

以下是用于计算立体相机视差的代码片段,疑问点在于disparity_sgbm.convertTo(disparity, CV_32F, 1.0 / 16.0f);这一行,为何要将视差按1/16的比例缩放:

int main(int argc, char **argv) {

    // 内参
    double fx = 718.856, fy = 718.856, cx = 607.1928, cy = 185.2157;
    // 基线
    double b = 0.573;

    // 读取图像
    cv::Mat left = cv::imread(left_file, 0);
    cv::Mat right = cv::imread(right_file, 0);
    cv::Ptr<cv::StereoSGBM> sgbm = cv::StereoSGBM::create(
        0, 96, 9, 8 * 9 * 9, 32 * 9 * 9, 1, 63, 10, 100, 32);    // 神奇的参数
    cv::Mat disparity_sgbm, disparity;
    sgbm->compute(left, right, disparity_sgbm);
    disparity_sgbm.convertTo(disparity, CV_32F, 1.0 / 16.0f);

原因解释

这是OpenCV StereoSGBM模块的设计规则:

  • StereoSGBM::compute输出的视差图disparity_sgbm是16位有符号整数类型(CV_16S),它把真实视差值放大了16倍后存储。
  • 这么做的目的是用整数格式保留亚像素级的视差精度:比如真实视差是2.375,直接存浮点数占内存,放大16倍后得到38(2.375×16),用整数存储既节省空间,又能保证0.0625(1/16)的精度。
  • 调用convertTo时除以16,就是把这个放大的整数值还原成真实的浮点数视差,这样后续用深度公式z = fx*b / disparity计算场景深度时,才能得到正确的结果。

内容的提问来源于stack exchange,提问作者CVDE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:45:02