首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从.las文件中读取点云

从.las文件中读取点云
EN

Stack Overflow用户
提问于 2020-10-27 18:09:54
回答 1查看 2.8K关注 0票数 1

我正在做一个使用.las激光雷达文件的项目。

我谷歌了一下,发现PDAL可以用来将.las转换成.pcd文件,这样我就可以使用PCL库了。

我使用PDAL将文件从.las转换为.pcd。

当我试图使用以下代码读取pcd文件时:

代码语言:javascript
运行
复制
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("C:/Users/hedey/OneDrive/Documents/Research_papers/STDF/10_4231_MFQF-Q141/I-65/LiDAR/RoadSurface/PCD/20180524_I65_NB_RoadSurface_7_53.5.pcd", *cloud) == -1) //* load the file
{
    PCL_ERROR("Couldn't read file test_pcd.pcd \n");
    return (-1);
}
std::cout << "Loaded "
    << cloud->width * cloud->height
    << " data points from test_pcd.pcd with the following fields: "
    << std::endl;
for (const auto& point : *cloud)
    std::cout << "    " << point.x
    << " " << point.y
    << " " << point.z << std::endl;
return (0);

结果如下,我感到惊讶的是,转换文件中的所有坐标都是(0,0,0)。这可能有什么问题?

EN

Stack Overflow用户

回答已采纳

发布于 2020-10-29 14:57:25

我建议您仔细查看PCD编写文档,以获得用于此特定转换的一些有用的指针。

这里的问题是,虽然双精度浮点数是有效的PCD,但它们不支持PCL的默认点类型。您可以手动编辑已转换的PCD文件,将x、y和z维度的大小从8更改为4。或者只需重新运行pdal translate,确保在选择要使用order选项转换的字段时设置数据类型和精度。一个例子看上去就像

代码语言:javascript
运行
复制
pdal translate input.las output.pcd --writers.pcd.order="X=Float:2,Y=Float:2,Z=Float:2"

此外,您可能不需要像"ScanAngleRank“这样的额外字段。如果您这样做了,您将需要提供PCL点类型支持,以便能够单独处理它们。若要删除额外的字段,可以追加

代码语言:javascript
运行
复制
--writers.pcd.keep_unspecified=false

到先前建议的命令。

最后要记住的是,处理像UTM这样的大坐标,并将它们存储在单个精度中可能会导致一些精度的损失。在转换到PCD之前,您应该考虑抵消数据(可能使用PDAL的变换滤波器)。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64560467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档