基于CodeBook的背景差分算法(C++)

/***********************************************************
//从文本文件中读取数据,并以矩阵Mat的形式存储到YML文件;
//文件中一行数据代表一组特征向量,且相邻分量的默认分割符为一个空格;
//该函数接受参数:文本文件名和分割符;
***********************************************************/
void txtConvertToMat(string& Filename, char& delimiter, OutputArray dst)
{
    fstream fs(Filename.data(),ios::in);
    char data[500];
    fs.getline(data,500);
    bool flags = false;
    vector<vector<double>> hu;
    int N = 8;
    while(data != NULL)
    {
        int count = 0;
        int pos = 0;
        int length = sizeof(data);
        char tmp[20] = "\0";
        cout.setf(ios::fixed);
        cout.precision(6);
        vector<double> huTmp;
        for(int i = 0; i < length; i++)
        {
            if(data[i] == '\0')
            {
                if(count == 0)
                {
                    flags = true;
                    break;
                }
                tmp[pos+1] = '\0';
                double d = atof(tmp);
                huTmp.push_back(d);
                hu.push_back(huTmp);
                huTmp.clear();
                pos = 0;
                count = 0;
                break;
            }else if(data[i] == delimiter)
            {
                tmp[pos+1] = '\0';
                double d = atof(tmp);
                huTmp.push_back(d);
                pos = 0;
                count++;
            }else
            {
                tmp[pos] = data[i];
                pos++;
            }
        }
        //cout << "------------------------" << endl;
        if(flags)
            break;
        fs.getline(data,500);
    }
    int huSize = hu.size();
    dst.create(huSize,N,CV_32FC1);
    Mat m = dst.getMat();
    for(int i = 0; i < huSize; i++)
    {
        for(int j = 0; j < N; j++)
        {
            m.row(i).col(j) = hu[i][j];
        }
    }
    char xmlFilename[100];
    cout << Filename << endl;
    int filenameLength = Filename.size();

    string tmpp = Filename.substr(0,filenameLength-4);
    tmpp = tmpp + ".xml";
    cout << tmpp << endl;
    FileStorage filel(tmpp,FileStorage::WRITE);
    filel << "Hu" << m;
    filel.release();
}

/***********************************************************

猜你喜欢

转载自blog.csdn.net/zdx19880830/article/details/45918579