Цикл над массивами в Python медленный. Вы должны векторизовать свой код, чтобы сделать его быстрым.
Единица длины 3D-точек зависит от единицы длины вектора перевода T
, которую вы получили от cv2.stereoCalibrate()
и которая, в свою очередь, зависит от длиныединица objectPoints
, переданная cv2.stereoCalibrate()
.
cv2.reprojectImageTo3D()
, должна делать то, что вы пишете в цикле (за исключением того, что она не вычитает b / 2). Он вернет изображение с размерами = (480, 640, 3) и dtype = float32. Таким образом, есть 3D-точка для каждого местоположения изображения. Неверные значения диспаратности (отрицательные числа) будут обрабатываться в соответствии с параметром handleMissingValues
для cv2.reprojectImageTo3D()
. (Проверьте, положительны ли ваши значения диспаратности)
Если массив диспаратности имеет dtype = int16, значения диспаратности закодированы как числа с фиксированной точкой, и вы должны разделить значения диспаратности на 2 ^ N (N - количество битовдля дробной части). Если вы использовали OpenCV BlockMatching N будет 4.