【翻译 Shahid Akhtar Khan的《How to create a depth map from stereo images in OpenCV Python?》】
可以使用立体(stereo)图像创建深度图。为了从立体图像构建深度图,我们找到了两个图像之间的差异。为此,我们使用 **cv2.StereoBM_create()**创建一个 StereoBM 类的对象并使用 stereo.comput() 计算视差。其中立体(stereo)是创建的 Stereo BM 对象。
步骤
要从立体图像创建深度图,您可以按照以下步骤操作 -
-
导入所需的库 OpenCV、Matplotlib 和 NumPy。确保您已经安装了它们。
-
使用 cv2.imread() 方法读取两个输入图像作为灰度图像。指定映像的完整路径。
-
创建 StereoBM 对象 stereo = cv2.StereoBM_create() 传递所需的数字差异(numDisparities )和块大小(blockSize)。
-
使用 stereo.compute() 计算输入图像之间的视差图。为了获得更好的结果,您可以调整**数字差异(numDisparities )和块大小(blockSize)**的值。
-
可视化视差图(深度图)。
让我们看一些示例,以从立体图像创建深度图。
例
在这个 Python 代码中,我们使用立体图像创建一个深度图。
# import required libraries
import numpy as np
import cv2
from matplotlib import pyplot as plt
# read two input images as grayscale images
imgL = cv2.imread('L.png',0)
imgR = cv2.imread('R.png',0)
# Initiate and StereoBM object
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
# compute the disparity map
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()
disparity.shape
我们将使用以下图像作为上述程序中的输入文件
输出
当你运行上面的 Python 程序时,它将产生以下输出窗口
例
在此 Python 代码中,我们使用两个立体图像创建深度图。
# import required libraries
import numpy as np
import cv2
from matplotlib import pyplot as plt
# read two input images
imgL = cv2.imread('aloeL.jpg',0)
imgR = cv2.imread('aloeR.jpg',0)
# Initiate and StereoBM object
stereo = cv2.StereoBM_create(numDisparities=128, blockSize=15)
# compute the disparity map
disparity = stereo.compute(imgL,imgR)
disparity1 = stereo.compute(imgR,imgL)
plt.imshow(disparity,'gray')
plt.show()
输出
当你运行上面的 Python 程序时,它将产生以下输出窗口