如何在校准后正确重新映射立体图像

时间:2018-05-30 11:00:05

标签: python-3.x opencv3.0 camera-calibration

我正在基于opencv“相机校准和3D重建»相机校准”教程在python中执行立体相机校准。 本教程适用于1个摄像头校准,因此我对代码应用了一些更改。 我的问题是如何在调整图像大小时更改ROI。

在我的代码中我做了:

ret, mtx, dist, mtx2, dist2, R, T, E, F = cv2.stereoCalibrate(objpoints_l, imgpoints_l ,imgpoints_r, mtxL, distL, mtxR, distR,
                                                          gray_l.shape[::-1],
                                                          flags = flags,
                                                          criteria = termination_criteria_extrinsics )
ret1, ret2, proj1, proj2, Q, roi1, roi2 = cv2.stereoRectify(mtx, dist, mtx2, dist2,
                                                        gray_l.shape[::-1], R, T,
                                                        None, None, None, 
                                                        None, None,
                                                        cv2.CALIB_ZERO_DISPARITY, 0)

h,  w = (320, 240)
size = (320, 240)

newcameramatrix1,roi1 = cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),0,(w,h))
mapx1, mapy1 = cv2.initUndistortRectifyMap(mtx, dist, None, newcameramatrix1, size,cv2.CV_8UC1) #cv2.CV_16SC2)


newcameramatrix2,roi2 = cv2.getOptimalNewCameraMatrix(mtx2,dist2,size,0,size)
mapx2, mapy2 = cv2.initUndistortRectifyMap(mtx2, dist2, None ,cameramatrix2, size,cv2.CV_8UC1)

此时我将所有内容保存在file.npz中,然后在另一个scipt中调用参数。

现在我应该裁剪图像如下:

dst = cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)

# crop the image
x,y,w,h = roi
dst = dst[y:y+h, x:x+w]

但我怎么办,因为我有2张照片?我认为应该是这样的

    dst = cv2.remap(frame, mapx1, mapy1, cv2.INTER_LINEAR)

    dst = dst[y:y + h, x:x + w]

    dst2 = cv2.remap (frame2, mapx2, mapy2, cv2.INTER_LINEAR)
    dst2 = dst2[y:y + h, x:x + w]

0 个答案:

没有答案