OpenCV中stereo.compute()返回视差图的含义及负值疑问
OpenCV中StereoBM.compute()返回的视差图解析
视差图的基本含义
视差图中每个有效像素值代表左图对应像素与右图匹配像素在水平方向上的距离差,计算公式为 disparity = x_left - x_right(x为像素横坐标)。该值与场景深度成反比:视差越大,物体离相机越近;视差越小,物体离相机越远。
负值(如-16)的含义
你看到的-16这类负值是OpenCV给匹配失败像素的标记值,具体和创建StereoBM时设置的numDisparities参数直接相关:
- 当你设置
numDisparities=16时,匹配失败的像素会被赋值为-numDisparities,也就是-16。 - 出现这类像素的常见场景:
- 图像无纹理区域(如纯色墙面),算法无法找到对应匹配点
- 遮挡区域(左图像素在右图中被前景遮挡,无对应点)
- 超出算法搜索范围的区域(算法仅在设定视差范围内搜索,超出则匹配失败)
视差图数值的具体范围
你得到的数值范围-16到211中:
- -16:匹配失败的标记值
- 0~211:有效视差值,代表左图像素相对右图对应像素在水平方向靠右的像素数。例如值为20,说明左图该像素的横坐标比右图对应像素大20个单位。
可视化优化建议
若想让视差图更易观察,可将负值映射为固定值后做归一化处理:
# 处理匹配失败的像素,将负值转为0后归一化到0-255 disparity_processed = cv.normalize(disparity, None, alpha=0, beta=255, norm_type=cv.NORM_MINMAX, dtype=cv.CV_8U) plt.imshow(disparity_processed, "gray") plt.show()
内容的提问来源于stack exchange,提问作者M812_
相关产品推荐
相关产品推荐

