【发布时间】:2021-01-04 22:47:13
【问题描述】:
我正在尝试读取 .bin 点云文件。我发现this link 建议了一个可以转换为 C++ 的 python 代码。 我想出了以下代码,但浮点数的精度与我在上述链接中运行 python 代码得到的结果不同。我注意到中间的一些坐标值完全丢失了,或者换句话说,python产生的浮点值的计数比C++代码的多:
std::ifstream file("C:/Users/hedey/OneDrive/Documents/Research_papers/STDF/data_object_velodyne/training/velodyne/001984.bin", ios::in | std::ios::binary);
char header[4];
float item;
if (file.is_open())
{
file.read((char*)&header, 4);
cout << char(header) << endl;
while (!file.eof())
{
file.read((char*)&item, 4);
cout << float(item) << endl;
}
file.close();
}
这是我试图阅读的 bin 文件的链接: https://www.dropbox.com/s/m6gney49lmr5vg9/001984.zip?dl=0
此外,使用上面的 C++ 代码没有显示标题字符串。我的代码可能有什么问题?如何改进?
【问题讨论】:
-
你文件的前四个字节是
F0 A7 92 41,其中三个不可打印;你确定你可以cout他们吗?您的过度类型转换是可疑的。您能否尝试直接阅读您的花车:file >> item;? -
前 4 个字节不可打印。每次我计算它们时,我都会得到一个不同的字符,有时是 'C' 或 'p',.... 当我尝试 file >> item 时,我得到一系列零而不是我之前得到的小数点值.
-
链接显示“基本上我们采用了一个 .pcd 文件,删除了标题并以二进制格式保存了数据。”所以我不确定你为什么认为有一个标题。该文件中有很多零。该链接表示它们以 5 个为一组,最后一个未使用的索引,但零与第 5 个值不匹配。 耸耸肩
-
您正在打印
header数组的地址,类型转换为char。垃圾进——垃圾出……
标签: c++ point-clouds bin