我有一个带有这种格式的数字的文本:
256.6 689.8
460.9 127.2
1027.5 110.5
1516.1 92.6
1319.9 580.3
以下用C ++编写的代码来阅读它们:
Vector<float> txt_data;
fstream myfile(path_to_file, ios_base::in);
while (myfile >> num){
txt_data.push_back(num);
}
myfile.close();
这里一切都很好。然后,我想将这些坐标复制到 openCV Mat 变量中。为此我先说:
Mat temp;
temp_ = Mat(txt_data.size()/2,2,CV_32F,&txt_data.front());
当显示结果矩阵时,我得到了这个:
[256.60001, 689.79999;
460.89999, 127.2;
1027.5, 110.5;
1516.1, 92.599998;
1319.9, 580.29999]
在算法的下一步中,我必须为每个点添加位移矢量。我可以通过将矩阵中的每一列与整数 disp_vector = [dx,dy] 相加来实现。然而有时(这是奇怪的事情)它可以正常工作,其他一些,它没有并给出其他数字(奇怪的事情,如:1320 + 12 = 1224)。任何想法如何才能正确地从文件中获取所有值只有一位小数的数据?
我试图做类似的事情:
float clean_one_dec = floor(all_decimals_float * 10) / 10);
但我得到了同样的价值。
编辑:我刚刚发现问题的错误。所有这些代码都在一个函数中,该函数接受位移矢量作为输入变量。向量定义为:
Vect<float> d_vec;
并且只有两个值: dx 和 dy 。
事实证明(并且我不知道为什么)在对其中一个坐标执行求和时, dx 和/或 dy 变为0。 (很奇怪,对吗?)我刚刚创建了另一个变量并在那里复制了输入 d_vec 。它现在正常工作。