opencv 读取双摄自动对齐参数intrinsics.yml、extrinsics.yml 2021-04-12

//读取
    Mat cameraMatrix[2], distCoeffs[2];
    Mat R, T, E, F;
    // save intrinsic parameters
    FileStorage fs("intrinsics.yml", FileStorage::READ);
    if (fs.isOpened())
    {
        fs["M1"] >> cameraMatrix[0];
        fs["D1"] >> distCoeffs[0];
        fs["M2"] >> cameraMatrix[1];
        fs["D2"] >> distCoeffs[1];
        fs.release();
    }
    else
    {
        cout << "Error: can not save the intrinsic parameters\n";
    }
    Mat R1, R2, P1, P2, Q;
    //Rect validRoi[2];

    fs.open("extrinsics.yml", FileStorage::READ);
    if (fs.isOpened())
    {
        //  R - 相机之间的旋转矩阵,这里R的意义是:相机1通过变换R到达相机2的位姿
        //    T - 左相机到右相机的平移矩阵
        //    R1 - 输出矩阵,第一个摄像机的校正变换矩阵(旋转变换)
        //    R2 - 输出矩阵,第二个摄像机的校正变换矩阵(旋转矩阵)
        //    P1 - 输出矩阵,第一个摄像机在新坐标系下的投影矩阵
        //    P2 - 输出矩阵,第二个摄像机在想坐标系下的投影矩阵
        //    Q - 4 * 4的深度差异映射矩阵
        fs["R"] >> R;
        fs["T"] >> T;
        fs["R1"] >> R1;
        fs["R2"] >> R2;
        fs["P1"] >> P1;
        fs["P2"] >> P2;
        fs["Q"] >> Q;
        fs.release();
    }
    else
    {
        cout << "Error: can not save the extrinsic parameters\n";
    }

    Size imageSize(camera_width, camera_width);
    Mat rmap[2][2];


    initUndistortRectifyMap(cameraMatrix[0], distCoeffs[0], R1, P1, imageSize, CV_16SC2, rmap[0][0], rmap[0][1]);
    initUndistortRectifyMap(cameraMatrix[1], distCoeffs[1], R2, P2, imageSize, CV_16SC2, rmap[1][0], rmap[1][1]);
 

//使用

    if (calibration)
                       remap(dst, dst, rmap[0][0], rmap[0][1], INTER_LINEAR);//左图纠正

    if (calibration)
                      remap(dst, dst, rmap[1][0], rmap[1][1], INTER_LINEAR);//右图纠正

 

你可能感兴趣的:(莲芳,opencv)