我在OpenCV 2.4.5中使用cv :: stereoSGBM类成功地创建了一个令人满意的视差图,具有256个不同的差异级别。我已将所有视差值除以16,如文档中所示,但此最终地图不可能包含“真实”视差:如果我添加到(x,y)像素的水平尺寸,则计算差异(x + d),另一图像中的结果坐标(x + d,y)对应于完全不同的像素。
我想这个问题源于我最初为256个视差水平参数化stereoSGBM的事实,但实际最大差异(以像素为单位)更小。由于我真的不知道实际最大差异,我不能相应地规范化由stereoSGBM计算的值。
我需要实际的视差值来计算密集的立体声对应(三角测量和三维重建所必需的)。
答案 0 :(得分:2)
我遇到了同样的问题,这就是我修复它的方法:
您的实际(原始)差异是StereoSGBM类作为输出提供的。您只能缩放它,以便您可以以图像格式查看它。
为了获得左图像和右图像的对应像素,使用由StereoSGBM类给出的视差矩阵。这意味着,您不应该将其缩放为以图像格式查看。然后你会得到相应的点。
但是在访问这些值时要小心。数据类型为_int16
。如果使用错误的数据类型,您将遇到异常。
这就是你要为相应的点做的事情:
假设I1
是你的左图,I2
是你的右图,而d
是某行i
和列j
的差异值,那么,{假设水平立体声,{1}}和I1(i,j)
将是相应的点。
答案 1 :(得分:0)