[英]Reading Point Cloud .bin file using C++
我正在尝试读取.bin 点云文件。 我发现此链接建议使用 python 代码,我可以将其转换为 C++。 我想出了以下代码,但浮点数的精度与我在上述链接中运行 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++ 代码未显示 header 字符串。 我的代码可能有什么问题? 如何改进?
这是一个产生与 Python 版本完全相同的 output 的代码:
#include <iostream>
#include <fstream>
#include <cmath>
int main()
{
std::ifstream file("1.pcd.bin", std::ios::in | std::ios::binary);
if (!file) return EXIT_FAILURE;
float item;
while (file.read((char*)&item, 4))
{
std::cout << "[" << item;
if (std::round(item) == item) std::cout << ".";
std::cout << "]\n";
}
}
现在,你在哪里 go 错了?
while
循环。 这比您对文件结尾条件的测试要好得多,这通常是不正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.