zoukankan      html  css  js  c++  java
  • 处理txt文件,保存为yml和cal文件

    xn提供的标定优化后的内外参格式是txt,不满足生成模板的yml和标定测量的cal,故转换

    void deal_yml_file() {
        string datapath = "C:/Users/gzr2018/Desktop/xuening'data/0224";
        std::string outpath;
        outpath = datapath + "/yaml";
        boost::filesystem::path diryaml(outpath.c_str());
        boost::filesystem::create_directory(diryaml);
     //   outpath = datapath + "/camera_para(distort)";
     //   boost::filesystem::path diryaml1(outpath.c_str());
     //   boost::filesystem::create_directory(diryaml1);
        outpath = datapath + "/camera_para";
        boost::filesystem::path diryaml2(outpath.c_str());
        boost::filesystem::create_directory(diryaml2);
        for (int i = 0; i <66; ++i)
        {
            std::ifstream in(datapath+"/2-24标定优化/CCD" + std::to_string(i + 1) + ".txt");
            std::ifstream in2(datapath+"/2-24/" + std::to_string(i + 1) + ".txt");
            double temp;
            char buffer[256];
            double kc1, kc2, kc3, kc4;
            double fx, cx, fy, cy;
            std::ofstream out_para(datapath + "/camera_para/CCD" + std::to_string(i + 1) + ".cal");
    
            double R[9], T[3];
           for (int i = 0; i < 4; i++)in.getline(buffer, 100);
            in >> R[0]; in >> R[1]; in >> R[2]; in >> T[0];
            in >> R[3]; in >> R[4]; in >> R[5]; in >> T[1];
            in >> R[6]; in >> R[7]; in >> R[8]; in >> T[2];
            for (int i = 0; i < 4; i++)
            in2.getline(buffer, 100); 
            in2 >> fx; in2 >> temp; in2 >> cx;
            in2 >> temp; in2 >> fy; in2 >> cy;
            in2.getline(buffer, 100);
            in2.getline(buffer, 100);
            in2 >> kc1 >> kc2 >> kc3 >> kc4;
    
        
            outpath = datapath + "/yaml";
            //将优化后的相机位姿和工件位姿输出
            cv::FileStorage fs(outpath + "/camera-CCD" + std::to_string(i + 1) + ".yml", cv::FileStorage::WRITE);
            in >> R[0]; in >> R[1]; in >> R[2]; in >> T[0];
            in >> R[3]; in >> R[4]; in >> R[5]; in >> T[1];
            in >> R[6]; in >> R[7]; in >> R[8]; in >> T[2];
            cv::Mat rvec(3, 3, cv::DataType<double>::type);
            cv::Mat tvec(3, 1, cv::DataType<double>::type);
            rvec = (cv::Mat_<double>(3, 3) <<
                R[0], R[1], R[2], R[3], R[4], R[5], R[6], R[7], R[8]);
            tvec = (cv::Mat_<double>(3, 1) << T[0], T[1], T[2]);
            cv::Mat second_rt(4, 4, cv::DataType<double>::type);
            second_rt = (cv::Mat_<double>(4, 4) <<
                1, 0, 0, 0,
                0,1,0, 0,
                0, 0, 1, 0,
                0, 0, 0, 1
                );
            cv::Mat rt(4, 4, cv::DataType<double>::type);
            rt = second_rt;
    
            cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 1);
            cv::Mat distCoeffs = (cv::Mat_<double>(4, 1) << kc1, kc2, kc3, kc4);
    
            fs << "trans_mat" << rt << "intrinsic_matrix" << cameraMatrix << "extrinsic_matrix_r" << rvec
                << "extrinsic_matrix_t" << tvec << "distCoeffs" << distCoeffs;
            out_para<< R[0] << " " << R[1] << " " << R[2] <<" "<< T[0] << endl;
            out_para << R[3] << " " << R[4] << " " << R[5] <<" "<< T[1] << endl;
            out_para << R[6] << " " << R[7] << " " << R[8] <<" "<< T[2] << endl;
            out_para << 0 << " " << 0 << " " << 0<<" "<< 1 << endl;
            out_para << endl;
            out_para << fx << " " << 0 << " " << cx << endl;
            out_para << 0 << " " << fy << " " << cy << endl;
            out_para << 0 << " " << 0 << " " << 1 << endl;
            out_para << endl;
            out_para << kc1 << " " << kc2 << " " << kc3 << " " << kc4 << endl;
            out_para.close();
            fs.release();
        }   
    
    }
    
    不疯魔不成活
  • 相关阅读:
    readAsDataURL(file) & readAsText(file, encoding)
    MySQL: Integer & String types
    JavaScript 中事件绑定的三种方式
    vue-router 导航守卫
    js 常见数组算法
    CSS渐变色边框,解决border设置渐变后,border-radius无效的问题
    margin:auto你真的理解么
    当margin和padding的值是百分比时,如何计算
    关于 js 函数参数的this
    Vue.js 中的 v-cloak 指令
  • 原文地址:https://www.cnblogs.com/gzr2018/p/14439702.html
Copyright © 2011-2022 走看看