gpt4 book ai didi

C++ opencv给Mat(矩阵)元素赋值时,之前赋值的元素发生了变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:18 52 4
gpt4 key购买 nike

我正在尝试将数据文件(1000 x 5 double )读入 Mat 对象。 Mat 对象被初始化为 Mat::zeros(1000,5,CV_32F)。在读取每一行数据的同时,相应的行被分配给新值。代码如下所示:

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

如您所见,我尝试在分配给 Mat(矩阵)元素时打印出它们的值,这样我可以确保存储了正确的值。奇怪的是赋值一切顺利,但是一些先前赋值的元素会突然改变它们的值。示例输出如下所示,在最后一行,分配元素 [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

谁能帮我弄清楚发生了什么事?非常感谢!

最佳答案

32F 在 OpenCV 中代表 float。 navdata.at<double>(0,4)是不正确的。你应该使用 navdata.at<float>(0,4)或者,将您的数据类型更改为 64F。此外,OpenCV 应该为您的代码抛出异常。你确定不是吗?

关于C++ opencv给Mat(矩阵)元素赋值时,之前赋值的元素发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622304/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com