我想使用两个低分辨率USB相机的图像创建一个视差图像。我正在使用OpenCV 4.0.0。我使用的帧来自视频。目前我得到的结果非常糟糕(如下所示)。
两个相机都已经校准,使用校准数据来消除图像的畸变。左图和右图分辨率低是原因吗?左图:
正确:
叠加层:
cv2.StereoSGBM_create()
函数的值基于OpenCV附带的示例代码(位于OpenCV/samples/python/stereo_match.py
)。
我会非常感激任何帮助或建议。
这是我的代码:
# convert both image to grayscale
left = cv2.cvtColor(left, cv2.COLOR_BGR2GRAY)
right = cv2.cvtColor(right, cv2.COLOR_BGR2GRAY)
# set the disparity matcher
window_size = 3
min_disp = 16
num_disp = 112-min_disp
stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
numDisparities = num_disp,
blockSize = 16,
P1 = 8*3*window_size**2,
P2 = 32*3*window_size**2,
disp12MaxDiff = 1,
uniquenessRatio = 10,
speckleWindowSize = 100,
speckleRange = 32
)
# compute disparity
dis = stereo.compute(left, right).astype(np.float32) / 16.0
# display the computed disparity image
matploitlib.pyplot.imshow(dis, 'gray')
matploitlib.pyplot.show()