如何将坐标从校正立体转换为 opencv 中的原始坐标?

How can I convert cordinates from rectified stereo to original coordinates in opencv?

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

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?谢谢!

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

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));