背景
我正在根据 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)
m1type 参数
cv2.CV_16SC2
为您提供 2 个通道的输出。cv2.CV_32FC1
,它将为您提供 map1 和 map2 的二维结果。
map1, map2 = cv2.initUndistortRectifyMap(camMat1, dCoeffs1, R, P1, (360, 640), cv2.CV_32FC1)