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);//右图纠正

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值