我有一个经过校准的立体相机装置,想要纠正一些跟踪图像点的坐标。
从立体声校准中获得相机矩阵(ML,MR),失真系数(DL,DR),这些相机之间的旋转矩阵(R)和平移向量(T)。
要获得纠正的参数,请调用以下函数
RL, RR, PL, PR, Q, _, _ = cv2.stereoRectify(ML, DL, MR, DR, IMG_SIZE, R, T, alpha=1)
整理整个图片
现在我想纠正左右相机的图像。在此之前,在跟踪坐标周围绘制红色圆圈。为了纠正我称之为的图像:
map_l = cv2.initUndistortRectifyMap(ML, DL, RL, PL, IMG_SIZE, cv2.CV_32FC1)
map_r = cv2.initUndistortRectifyMap(MR, DR, RR, PR, IMG_SIZE, cv2.CV_32FC1)
img_l = draw_circles(img_l, coordinates_left, "red") # white image with red circles
img_r = draw_circles(img_r, coordinates_right, "red")
img_rect_l = cv2.remap(img_l, map_l[0], map_l[1], cv2.INTER_LINEAR)
img_rect_r = cv2.remap(img_r, map_r[0], map_r[1], cv2.INTER_LINEAR)
纠正跟踪点
不是纠正整个图像,而只是想纠正跟踪点坐标,因此我使用undistortPoints()并以绿色绘制经过修正后的图像。
coordinates_left_rectified = cv2.undistortPoints(coordinates_left, ML, DL, R=RL, P=PL)
coordinates_right_rectified = cv2.undistortPoints(coordinates_right, MR, DR, R=RR, P=PR)
img_rect_l = draw_circles(img_rect_l, coordinates_left_rectified, "green")
img_rect_l = draw_circles(img_rect_l, coordinates_right_rectified, "green")
不幸的是,我没有获得与重新映射相同的结果(下图)。那么我做错了什么?有任何想法吗?
谢谢!