我在使用opencv从视差图计算深度时遇到麻烦。我知道两个立体图像中的距离是使用z = (baseline * focal) / (disparity * p)计算的,但是我不知道如何使用 map 计算视差。如果使用以下代码,则会为我提供两个图像的视差图。

import numpy as np
import cv2

# Load the left and right images in gray scale
imgLeft = cv2.imread('logga.png', 0)
imgRight = cv2.imread('logga1.png', 0)

# Initialize the stereo block matching object
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=5)

# Compute the disparity image
disparity = stereo.compute(imgLeft, imgRight)

# Normalize the image for representation
min = disparity.min()
max = disparity.max()
disparity = np.uint8(6400 * (disparity - min) / (max - min))



# Display the result
cv2.imshow('disparittet', np.hstack((imgLeft, imgRight, disparity)))
cv2.waitKey(0)
cv2.destroyAllWindows()

最佳答案

为了根据视差计算深度,OpenCV具有函数reprojectImageTo3d

您需要立体矫正的视差深度矩阵(Q)(或可以按照链接中的说明创建)。您可以了解有关Q矩阵here的更多信息。

获得Q矩阵后,您只需将视差图重新投影到3D
depth = cv2.reprojectImageTo3D(disparity, Q)

关于python - 使用OpenCV计算深度视差图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58113312/

10-12 13:35