C++opencv在为Mat(矩阵)元素赋值时,先前指定的元素发生了更改
C++ opencv while assigning value to Mat (matrix) element, the previously assigned element changed
我正在尝试将一个数据文件(1000 x 5倍)读取到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应该为您的代码抛出一个异常。你确定不是吗?
相关文章:
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 这C++代码中发生了什么C++(指数函数)
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 从"LLONG_MAX 秒"构造 std::chrono::毫秒变量时发生了什么?
- 这个片段中关于 n 在 pc[i] 中的表示发生了什么
- istringstream,num1 和 num2 在这里发生了什么?
- 究竟发生了什么,我们需要在 c++ 中双重调度/访客
- libstdc++的make_shared布局在gcc 4.x和gcc 6.x之间是否发生了变化?
- 我是否能够确定在部署一个程序后发生了什么,我在数组末尾写入?
- 为什么我的 int 在 C++ 程序中间发生了变化?
- 这个阶乘程序内部发生了什么?
- C++ - *(int**) 地址?这里发生了什么?
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 在使用VS2010构建ACE和TAO(CORBA)时发生了许多错误
- 为什么在波纹管程序中发生了从字符串常量到'char*'的警告已弃用的转换
- 让对象知道它创建的 show 函数中发生了什么
- 这里的矢量数组发生了什么?
- C++opencv在为Mat(矩阵)元素赋值时,先前指定的元素发生了更改