当视差图是CV_8U型时,访问OpenCV中的视差值?

时间:2016-09-20 17:30:47

标签: c++ opencv

我在上一篇文章中看到,当您使用disptype==CV_16S在open cv中获取视差图中的视差值时,除以16.0。视差图何时为CV_8U类型怎么样?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

P.S:我没试过这个。