Open3d C++ 从点云创建文件由于未知文件扩展名而失败

Open3d C++ Create File from point cloud failing due to unknown file extension

提问人:Liam Salass 提问时间:6/13/2023 最后编辑:Liam Salass 更新时间:6/13/2023 访问量:298

问:

我正在尝试使用 C++ 中的 open3d 库读取点云 .ply 文件。使用 或open3d::io::CreatePointCloudFromFileopen3d::io::ReadPointCloud(pcv_load_path, *pcv, open3d::io::ReadPointCloudOption(".ply", false, false, true))

我正在使用最新版本的库 cxx 20 和 cmake 来链接库。 谢谢。

我尝试在 python 中运行相同的代码并使用相同的路径,效果很好,所以我知道文件没有损坏并且文件格式正确。这是我使用的 python 代码:

pc_load = o3d.io.read_point_cloud(pcv_load_path)
o3d.visualization.draw_geometries([pc_load])

我还尝试使用 open3d 提供的不同 IO 函数以不同的方式读取文件。下面是 C++ 代码:

if (! open3d::io::ReadPointCloud (pcv_load_path, *pcv, open3d::io::ReadPointCloudOption ("auto", false, false, true))) {
    if (!open3d::io::ReadPointCloud(pcv_load_path, *pcv, open3d::io::ReadPointCloudOption(".ply", false, false, true))) {
            cout << "Error: cannot load point cloud" << endl;
            return;
        }
    }
pcv = open3d::io::CreatePointCloudFromFile(pcv_load_path, ".ply", false);

*请注意,两者的pcv_load_path完全相同。这是一个显式路径,我正在使用正斜杠。

此外,在pcv_load_path。我在路径字符串的末尾包含“.ply”格式。

编辑: 输出如下:

[Open3D WARNING] Read geometry::PointCloud failed: unknown file extension for  (format: ).

编辑: 我尝试使用以下代码输出文件扩展名:

open3d::utility::filesystem::GetFileExtensionInLowerCase(pcv_load_path) << endl;

这会导致内存访问冲突并导致代码崩溃。

C++ C++20 Open3D

评论

1赞 wohlstad 6/13/2023
您确定参数的值是否正确?假设您的文件名已经包含“.ply”扩展名,您可以尝试使用“auto”作为参数(我不熟悉open3d,只是在线查看了文档)。".ply"formatformat
1赞 saurabheights 6/13/2023
您可以尝试调用 open3d::utility::GetFileExtensionInLowerCase 来查看返回的扩展名吗?应该是层。github.com/isl-org/Open3D/blob/......或启用 Open3D 的调试日志记录,请参阅 github.com/isl-org/Open3D/blob/...
1赞 saurabheights 6/13/2023
如果返回 ply,您应该能够使用 ReadPointCloudFromPLY 方法读取 pointcan,请参阅 github.com/isl-org/Open3D/blob/...
0赞 Liam Salass 6/13/2023
不幸的是,使用 GetFileExtensionInLowerCase 导致程序崩溃。
0赞 saurabheights 6/15/2023
@LiamSalass - 这看起来不再是代码中的问题,而是 open3d 的一些问题。但是,为了安全起见,您可以将方法的整个代码复制到您自己的函数中并用您的变量对其进行测试。代码在这里 - github.com/isl-org/Open3D/blob/...GetFileExtensionInLowerCaseGetFileExtensionInLowerCasepcv_load_path

答: 暂无答案