【问题标题】:Accessing the disparity value in OpenCV when disparity map is type CV_8U?当视差图为 CV_8U 类型时访问 OpenCV 中的视差值?
【发布时间】:2023-03-21 08:15:01
【问题描述】:

我从之前的帖子中看到,当您使用disptype==CV_16S 在打开的 cv 中获取视差图中的视差值时,您将除以16.0。当视差图是类型CV_8U时怎么样?

是否必须除以8.0 才能获得真正的视差值?我还没有找到任何关于这种特定类型的文档。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    CV_8U的视差图可以通过imgDisparity16S.convertTo( imgDisparity8U, CV_8UC1, range); 从CV_16S类型的视差图中得到 其中范围计算为range = 255 / maxVal - minValminMaxLoc( imgDisparity16S, &minVal, &maxVal ); 所以我猜范围的倒数,即1 / range 会将 CV_8U 转换为 CV_16S,然后你就可以获得实际的视差值。

    P.S : 这个我没试过。

    【讨论】:

      【解决方案2】:

      除以 16 是因为 StereoSGBM 的原始视差输出 按 16 缩放,而不是因为视差的位深度/disptype。

      如果您使用sgbm->compute(left, right, disp);,则输出显示类型为CV_16S,即使您之前将disp 初始化为CV_8U 类型。因此,使用convertTo 并除以16.f 是正确的方法。 (如果您出于某种原因想要在使用convertToreprojectImageTo3D 之前修改disp,那么我不知道您将如何获得真正的差异值。但是,可以convertTo CV_8U而不是CV_32F,但结果显然不会完全相似。)

      【讨论】:

        猜你喜欢
        • 2015-05-11
        • 2013-12-19
        • 2015-06-09
        • 2011-05-27
        • 2014-07-18
        • 2020-11-19
        • 2014-09-21
        • 2016-06-24
        • 2013-10-13
        相关资源
        最近更新 更多