我正在基于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]