立体图像中带有非平行主线的OpenCV深度图

时间:2019-10-10 11:28:17

标签: python opencv computer-vision

我找到了有关getting a depth map from stereo images的教程,其中包含以下代码:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)

stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

简短问题:

对极线是否必须平行才能使该算法起作用?我有两个充当立体声系统的摄像机,但是由于我只是将它们放在桌子上,所以它们之间只有很小的旋转和平移。因此,我的主观表情到目前为止并不是平行的。

1 个答案:

答案 0 :(得分:2)

是的,对极线需要平行才能使createStereoBM工作。

为此,您需要估计两个摄像机之间的外部校准(旋转和平移)。它的工作原理与单摄像机校准相同。有一些立体声校准教程,但我暂时还没有找到一个好的python。看看ROS camera calibration tool

接下来,您需要校正摄像机图像。这意味着您可以使用从立体校准中获得的映射并扭曲图像,从而使极线平行。看看OpenCV的stereoRectify文档:here

当您按照我链接的文档中的建议使用校准参数调用initUndistortRectifyMap时,图像会发生扭曲,以使对极线平行,现在您应该可以使用createStereoBM来创建视差图。