OpenCV - Python - 立体相机 - undistortPoints()initUndistortRectifyMap()+ remap()

时间:2018-03-22 13:51:41

标签: python opencv camera

我有一个经过校准的立体相机装置,想要纠正一些跟踪图像点的坐标。

从立体声校准中获得相机矩阵(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")

不幸的是,我没有获得与重新映射相同的结果(下图)。那么我做错了什么?有任何想法吗?

谢谢!

image - different results

0 个答案:

没有答案