我在一个包含2个摄像头的搅拌器中模拟一个场景,以测试立体声矫正和视差构造。 这两款相机均通过模拟的方形检查板进行校准。
从校正后的图像中,我注意到尽管对极线是平行的并且计算出的视差看起来还可以,但是我的图像却被旋转并裁剪了。我注意到如果更改校准图像并且试图了解是什么原因导致旋转量可能会有所不同。
我想更多地了解为什么我的图像旋转,以及如何尽可能减少或消除它。由于我的视差图也会旋转,因此我正在寻找一种将其恢复到原始状态的方法。
下面是我的代码和一些图片的片段
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, allcorner, (1333,1000),cv2.CALIB_USE_INTRINSIC_GUESS ,None)
ret2, mtx2, dist2, rvecs2, tvecs2 = cv2.calibrateCamera(objpoints2, allcorner2, (1333,1000), cv2.CALIB_USE_INTRINSIC_GUESS ,None)
_,_,_,_,_, R, T, E, F = cv2.stereoCalibrate(objpoints, allcorner, allcorner2, mtx, dist, mtx2, dist2, (1333,1000), cv2.CALIB_SAME_FOCAL_LENGTH )
R1,R2, P1, P2, Q, vPr1, vPR2 = cv2.stereoRectify(mtx, dist, mtx2, dist2, (1333,1000), R,T)
mapx1, map1 = cv2.initUndistortRectifyMap(mtx, dist, R1, P1, (1333,1000), cv2.CV_32FC1)
mapx2, map2 = cv2.initUndistortRectifyMap(mtx2, dist2, R2, P2, (1333,1000), cv2.CV_32FC1)
leftRect = cv2.remap(unrectImgLeft, mapx1, map1,cv2.INTER_LINEAR )
rightRect = cv2.remap(unrectImgRight, mapx2, map2,cv2.INTER_LINEAR )
在纠正之前:
整改后:
视差图: