我在上一篇文章中看到,当您使用disptype==CV_16S
在open cv中获取视差图中的视差值时,除以16.0
。视差图何时为CV_8U
类型怎么样?
您是否必须除以8.0
才能获得真正的差异值?我还没有找到关于这种特殊类型的任何文档。
答案 0 :(得分:0)
除以16,因为StereoSGBM的原始差异输出 缩放为16,而不是因为差异的位深度/差异。
如果您使用sgbm->compute(left, right, disp);
,则输出显示类型为CV_16S
,即使您之前已将disp
初始化为CV_8U
类型。因此,使用convertTo
并除以16.f
是正确的方法。 (如果您出于某种原因想要在使用disp
和convertTo
之前修改reprojectImageTo3D
,那么我不知道您将如何获得真正的差异值。但是,有可能convertTo
CV_8U
代替CV_32F
,但结果显然不完全相似。)
答案 1 :(得分:0)
使用imgDisparity16S.convertTo( imgDisparity8U, CV_8UC1, range);
可以从CV_16S类型的视差图中获得CV_8U的视差图
其中范围计算为range = 255 / maxVal - minVal
和minMaxLoc( imgDisparity16S, &minVal, &maxVal );
所以我想范围的倒数,即1 / range
将CV_8U转换为CV_16S然后你可以有实际的差异值。