如何在opencv中将坐标从矫正立体声转换为原始坐标?

时间:2018-03-15 21:02:59

标签: opencv 3d-reconstruction

我正在使用此代码来纠正立体图像对:

stereoRectify(cm, Mat(), cm, Mat(),imageSize,
    RT_d,tt,R1,R2,P1,P2,Q,CALIB_ZERO_DISPARITY,
    0.9, imageSize, &validROI[0], &validROI[1]);

initUndistortRectifyMap(cm, Mat(), R1, P1, imageSize, CV_16SC2, rmap[0][0], rmap[0][1]);
initUndistortRectifyMap(cm, Mat(), R2, P2, imageSize, CV_16SC2, rmap[1][0], rmap[1][1]);
remap(v1.img, rimg1, rmap[0][0], rmap[0][1], INTER_LINEAR);
remap(v2.img, rimg2, rmap[1][0], rmap[1][1], INTER_LINEAR);

整顿工作顺利。

现在我需要将整流后的图像rimg1中的每个像素(x,y)与v1.img中的初始像素(x0,y0)相匹配。我该怎么做?我在哪里可以获得公式,如何使用P1和R1?感谢名单!

1 个答案:

答案 0 :(得分:0)

我发现您需要切换存储模式:

initUndistortRectifyMap(cm, Mat(), R1, P1, imageSize, CV_32FC1, rmap[0][0], rmap[0][1]);
initUndistortRectifyMap(cm, Mat(), R2, P2, imageSize, CV_32FC1, rmap[1][0], rmap[1][1]);

然后你可以轻松获得映射:

auto x0 = rmap[0][0].at<float>(Point(x, y));
auto y0 = rmap[0][1].at<float>(Point(x, y));