OpenCV 和 3D 重建:为什么 initUn DistorifyMap() 中的 map1 具有尺寸 (x, y, 2)?

问题描述 投票:0回答:1

背景

我正在根据 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)
python opencv stereo-3d 3d-reconstruction
1个回答
0
投票

m1type 参数

cv2.CV_16SC2
为您提供 2 个通道的输出。
尝试
cv2.CV_32FC1
,它将为您提供 map1 和 map2 的二维结果。

map1, map2 = cv2.initUndistortRectifyMap(camMat1, dCoeffs1, R, P1, (360, 640), cv2.CV_32FC1)
© www.soinside.com 2019 - 2024. All rights reserved.