c++ - 使用保存的参数进行立体相机校正

标签 c++ opencv

我使用相机校准中的内在和外在文件来校正我的图像对,这样我就可以制作更好的深度图,但每次我尝试运行我的程序时。我的深度图输出只显示空白。

这是我整改的代码:

    FileStorage fs("intrinsics.yml", FileStorage::READ);
    fs["intrisics"] >> intrinsics;

    Mat M1, D1, M2, D2;
    fs["M1"] >> M1;
    fs["D1"] >> D1;
    fs["M2"] >> M2;
    fs["D2"] >> D2;

    M1 *= scale;
    M2 *= scale;

    fs.open("extrinsics.yml", FileStorage::READ);
    fs["extrinsics"] >> extrinsics;

    Mat R, T, R1, R2, P1, P2;
    fs["R"] >> R;
    fs["T"] >> T;
    fs["R1"] >> R1;
    fs["R2"] >> R2;
    fs["P1"] >> P1;
    fs["P2"] >> P2;
    fs["Q"] >> Q;
    stereoRectify(M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, 0, -1, img_size, &roi1, &roi2);

    Mat map11, map12, map21, map22;
    initUndistortRectifyMap(M1, D1, R1, P1, img_size, CV_32FC1, map11, map12);
    initUndistortRectifyMap(M2, D2, R2, P2, img_size, CV_32FC1, map21, map22);

    Mat img1r, img2r;
    remap(grayL, img1r, map11, map12, INTER_LINEAR);
    remap(grayR, img2r, map21, map22, INTER_LINEAR);

我的 SGBM 代码:

    Ptr<StereoSGBM> sgbm = StereoSGBM::create
    (0,    //int minDisparity
        96,     //int numDisparities
        5,      //int SADWindowSize
        600,    //int P1 = 0
        2400,   //int P2 = 0
        20,     //int disp12MaxDiff = 0
        16,     //int preFilterCap = 0
        1,      //int uniquenessRatio = 0
        100,    //int speckleWindowSize = 0
        20,     //int speckleRange = 0
        true);  //bool fullDP = false

    sgbm->compute(img1r, img2r, disparity_sgbm);

    normalize(disparity_sgbm, disp_done_sgbm, 0, 255, CV_MINMAX, CV_8U);

每次我校准我的相机并运行我的程序时都能正常工作并提供不错的深度图。但是立体声对没有对齐,因为它没有被纠正。校准我的相机需要几个小时,所以我尝试只加载我的相机参数,这样我就不必每次都校准几个小时来获得像样的深度图

提前致谢!

这是我的输出:

https://docs.google.com/document/d/1ajS3vgoVPx2RgbroV8qH2WYHU85PL_SJ-9A4q8aa8e8/edit?usp=sharing

最佳答案

整改过程好像没问题,是不是你的数据有问题? 我建议确保您的整流输入没有错误地加载,并且重新映射步骤提供正确的行对齐立体声对。

关于c++ - 使用保存的参数进行立体相机校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256780/

相关文章:

c++ - 弧度还是度数?

python - 如何将OpenCV背景减法应用于图像

python - 属性错误 : 'module' object has no attribute 'xfeatures2d' [Python/OpenCV 2. 4]

python - 图片在OpenCV中的文字

c++ - 如何实现 cv::Mat 对象的循环缓冲区(OpenCV)?

C++ 最适合的数据结构

c++ - 如何在MFC中显示文件的所有行

Python/C++快速高斯拟合4分

c++ - 用 C 封装 C++ 接口(interface)

python - Python Opencv 新手 : Motion Tracking using webcam Thresholding/dilate