在OpenCV Python中如何从立体图像创建深度图?
可以使用立体图像创建深度图。为了从立体图像构建深度图,我们找到两个图像之间的视差。为此,我们使用 StereoBM 类创建一个对象,并使用 cv2.StereoBM_create() 计算视差 stereo.comput() 。其中 stereo 是创建的 StereoBM 对象。
步骤
要从立体图像创建深度图,请按照以下步骤操作:
- 导入所需的库 OpenCV,Matplotlib 和 NumPy 。确保您已安装它们。
-
使用 cv2.imread() 方法读取两个输入图像作为灰度图像。指定图像的完整路径。
-
创建一个StereoBM对象 stereo = cv2.StereoBM_create() 传递所需的 numDisparities 和 blockSize 。
-
使用 stereo.compute() 计算输入图像之间的视差图。要获得更好的结果,可以调整 numDisparities 和 blockSize 的值。
-
可视化视差图(深度图)。
让我们看一些例子,从立体图像中创建深度图。
例子
在此Python代码中,我们使用立体图像创建深度图。
# 导入所需的库
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 读取两个输入图像作为灰度图像
imgL = cv2.imread('L.png',0)
imgR = cv2.imread('R.png',0)
# 初始化并创建一个StereoBM对象
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
# 计算视差图
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()
disparity.shape
我们将使用以下图像作为 输入文件 在上述程序中进行操作−
输出
当您运行上述Python程序时,它将产生以下输出窗口−
让我们再看一个例子。
例子
在此Python代码中,我们使用两个立体图像创建深度图。
# 导入所需工具库
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 读取两张输入图像
imgL = cv2.imread('aloeL.jpg',0)
imgR = cv2.imread('aloeR.jpg',0)
# 初始化立体匹配对象和StereoBM对象
stereo = cv2.StereoBM_create(numDisparities=128, blockSize=15)
# 计算视差图
disparity = stereo.compute(imgL,imgR)
disparity1 = stereo.compute(imgR,imgL)
plt.imshow(disparity,'gray')
plt.show()
我们将使用以下图像作为 输入文件 在上面的程序中 –
输出
当您运行上述 Python 程序时,将会显示以下 输出 窗口 –