从Txt文件中读取并转换为float mat opencv

时间:2013-06-06 07:25:08

标签: opencv vector matrix

我需要帮助。我正在从文本文件中读取数据。它有3列和100行。数据采用(x,y,z)格式。我想将x和y组合成一个Mat数据,将Z组合成另一个Mat数据。

对于Z来说很简单,我创建了它的浮点矩阵。我正在分别阅读x和y,此刻我将它存储为浮动向量。如下面的代码所示。

char buf[255];
float x, y;
float label;
vector<float> x_coord;
vector<float> y_coord;

Mat class_label(y_coord.size(), 1, CV_32FC1);

if(!inFile.eof())
{
    while (inFile.good())
    {
        inFile.getline(buf, 255);
        string line(buf);
        istringstream iss(line);
        iss >> x;
        x_coord.push_back(x);
        iss >> y;
        x_coord.push_back(y);
        y_coord.push_back(y);
        iss>> label;
        class_label.push_back(label);
    }
    inFile.close();
}

如何将x_coord和y_coord结合起来创建Mat training_data(y_coord.size(), 2, CV_32FC1, train_data );类型的Mat

这是2列100行。我这样做但它不起作用

float train_data[10938][2];

for (int j = 0; j < 2; j++)
{
    for (int i = 0; i < x_coord.size(); i++)
    {
        int index = j + i * x_coord.size();
        train_data[i][j] = x_coord.at(index);  
        //train_data[i][1] = x_coord.at(i);
    }
}

我真的被困在这里请帮助我。

1 个答案:

答案 0 :(得分:2)

您可以直接填充Mat而不使用辅助数组train_data

for (int j = 0; j < 2; j++)
{
    for (int i = 0; i < x_coord.size(); i++)
    {
        int index = j + i * x_coord.size();
        training_data.at<float>(i, j) = x_coord.at(index);
    }
}

您也可以在阅读文件时执行相同的操作。有关详细信息,请阅读Mat::at() documentation

相关问题