Реконструкция OpenCV и 3D: почему map1 из initUndistortRectifyMap() имеет размеры (x, y, 2)?

#python #opencv #stereo-3d #3d-reconstruction

#python #opencv #стерео-3d #3d-реконструкция

Вопрос:

КОНТЕКСТ

Я играю со стереовидением в соответствии с документами OpenCV. Я выполнил все до stereoRectify() . Я нашел информацию о том, что следующим шагом является получение карт, initUndistortRectifyMap() а затем их переназначение с изображениями, над которыми я буду работать.

ПРОБЛЕМА

Я не знаю, почему initUndistortRectifyMap() возвращает мне map1, размер которого равен (y, x, 2), где x и y — размеры img, (x = 360, y = 640) в моем случае. map2 равен (y, x), и это выглядит нормально.

код

 retL, mtxL, distL, rvecsL, tvecsL = cv2.calibrateCamera(objpoints, imgpointsL, grayL.shape[::-1], None, None)
retR, mtxR, distR, rvecsR, tvecsR = cv2.calibrateCamera(objpoints, imgpointsR, grayR.shape[::-1], None, None)
retval, camMat1, dCoeffs1, camMat2, dCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpoints, imgpointsL, imgpointsR,
                                                                               mtxL, distL, mtxR, distR,
                                                                               grayL.shape[::-1], flags=cv2.CALIB_FIX_INTRINSIC)

R1, R2, P1, P2, Q, roi1, roi2 = cv2.stereoRectify(camMat1, dCoeffs1, camMat2, dCoeffs2, grayL.shape[::-1], R, T)
map1, map2 = cv2.initUndistortRectifyMap(camMat1, dCoeffs1, R, P1, (360, 640), cv2.CV_16SC2)