2013-06-06 48 views
0

我需要幫助。我正在從文本文件中讀取數據。它有3列和100行。數據爲(x,y,z)格式。我想將x和y合併成一個Mat數據,將Z合併成另一個。從Txt文件讀取並轉換爲浮動墊opencv

對於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);

即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); 
    } 
} 

我真的被困在這裏請幫助我。

+0

你真的想要2列單浮點數據,還是CV_32FC2的單列? – berak

+0

2列單浮點數據 –

回答

2

您可以直接填充墊子,無需輔助陣列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