2
我試圖將數據文件(1000 x 5雙)讀入Mat對象。 Mat對象初始化爲Mat :: zeros(1000,5,CV_32F)。在讀取每行數據時,將相應的行分配給新值。代碼如下所示:C + + opencv同時爲Mat(矩陣)元素賦值,先前賦值的元素已更改
void readNavFile(const char* filename, Mat& navdata) {
ifstream infile(filename);
string line;
int x=0, y=0;
if (infile.is_open()) {
while (getline(infile, line)) {
double value;
stringstream converter(&line[0]);
double* p = navdata.ptr<double>(x);
while (converter >> value) {
p[y++] = value;
//DEBUGING
cout << "Pointer value:" << p[y-1] << endl;
cout << "Matrix value at:" << "row:" << x << " col:" << y-1 <<" is: "<< navdata.at<double>(x,y-1)<< endl;
cout << navdata.at<double>(0,4) << endl;
}
y = 0;
x++;
}
infile.close();
//DEBUGING
cout << "Final matrix first row, last element:" << navdata.at<double>(0,4) << endl;
}
}
正如你所看到的,我試着打印出墊(矩陣)元素的值,因爲它們進行分配,這樣我可以肯定的是正確的值存儲。奇怪的是,這項任務都進行得很順利,但是之前分配的一些元素會讓所有突變者改變它們的價值。樣品的輸出看起來象以下,在最後一行,分配元件[1,2],在[0,4]從它的正確值18.1901改爲3.31757e-190後的值:
Pointer value:-35.1236
Matrix value at:row:0 col:0 is: -35.1236
Matrix element [0,4]: 0
Pointer value:150.735
Matrix value at:row:0 col:1 is: 150.735
Matrix element [0,4]: 0
Pointer value:360.094
Matrix value at:row:0 col:2 is: 360.094
Matrix element [0,4]: 0
Pointer value:3.46045
Matrix value at:row:0 col:3 is: 3.46045
Matrix element [0,4]: 0
Pointer value:18.1901
Matrix value at:row:0 col:4 is: 18.1901
Matrix element [0,4]: 18.1901
Pointer value:-35.1236
Matrix value at:row:1 col:0 is: -35.1236
Matrix element [0,4]: 18.1901
Pointer value:150.735
Matrix value at:row:1 col:1 is: 150.735
Matrix element [0,4]: 18.1901
Pointer value:360.096
Matrix value at:row:1 col:2 is: 360.096
Matrix element [0,4]: 3.31757e-190
莫非有人幫我弄清楚發生了什麼事?非常感謝你!
一個瘋狂的猜測,因爲我不知道庫,但'CV_32F'碰巧意味着「32位浮點」?而'double'碰巧有64位? – 2012-07-24 01:22:53
是的,就是這樣。我最初有浮動,然後我想我可能需要額外的精度,所以改變了一倍,但忘了改變mat init!謝謝! – Silmarilli 2012-07-24 01:35:57