Как правильно переназначить стереоизображение после калибровки - PullRequest
0 голосов
/ 30 мая 2018

Я выполняю калибровку стереокамеры в python на основе руководства opencv «Калибровка камеры и 3D-реконструкция» Калибровка камеры ».Этот урок предназначен для калибровки 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)

На этом этапе я сохраняю все в файле .npz и вызываю параметры в другом сценарии.

Теперь я должен обрезать изображение следующим образом:

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]
...