Pandas 如何在Python中打开和查看pcd文件?

Pandas 如何在Python中打开和查看pcd文件?,pandas,numpy,csv,data-analysis,point-cloud-library,Pandas,Numpy,Csv,Data Analysis,Point Cloud Library,问题描述: 我需要查看此特定格式(非ply)的pcd(点云数据)文件。我已经测试了一些库,如pypcd(主要解决方案)和一些替代方案,如pyntcloud(次要解决方案)、open3d、python pcl和pcd3ply,如解决方案建议书1中所述。二,。在下面1.我还添加了相关的.pcd文件,我的开发人员朋友说该文件与建议的代码一起运行 我在这个问题的末尾添加了一个相关的.pcd文件示例,以及图片2和3中.csv文件的数据集标题的屏幕截图。我已经使用一个名为CloudCompare的开源软件查

问题描述:

我需要查看此特定格式(非ply)的pcd(点云数据)文件。我已经测试了一些库,如pypcd(主要解决方案)和一些替代方案,如pyntcloud(次要解决方案)、open3d、python pcl和pcd3ply,如解决方案建议书1中所述。二,。在下面1.我还添加了相关的.pcd文件,我的开发人员朋友说该文件与建议的代码一起运行

我在这个问题的末尾添加了一个相关的.pcd文件示例,以及图片2和3中.csv文件的数据集标题的屏幕截图。我已经使用一个名为CloudCompare的开源软件查看了.pcd文件,我将从中在本文末尾的图片中添加屏幕截图

.csv导出中数据集的头部如下所示(第一行包括时间戳,第二行是一些未知整数,第三行是以下54个参数,其中前8个参数处理x、y、z点云坐标,然后是RGB数据输入等):
grid_pos_x;网格位置;pos_3d_x;pos_3d_y;pos_3d_z;正常_x;正常y;正常_z
,而其余的行(4-->2500+)包括如下相应的值(如列片段中所示的前8个值):
-17-30;-1.012568473815918;-0.9698562622070312;3.468137264251709;-0.17042680084705353;0.0034385689068585634;-0.9853643178939819

致管理员:请注意,我是堆栈溢出新手。我花了几个小时来阐述这个问题,我没有希望解决这个问题。请允许回答。我100%愿意接受任何修改,以使我的文章更好。此域没有太多可用文档。

已完成的操作:

我使用Jupyter Notebook、Google Colab和PyCharm来查看pypcd文件,但每次在构建python lzf时都会出现以下错误:

第一个错误指向微软VisualStudio,用Python查看C++(+另外加载Cython库),之后,我尝试在上面提到的IDE中执行代码,但总是使用相同的错误。在使用Python3执行时,下面显示的代码“from pypcd import pypcd”应该可以让它工作,我也在Python2内核中执行了它,因为Python3对pypcd的支持似乎不确定。这可能是一个转储问题,但既然维护已经正式结束,我还能在Python2中执行代码吗?你知道;我是Windows10用户

还尝试了其他方法,例如open3d,特别是PytCloud库,它似乎得到了更好的支持,并且是实现这一点的第二个首选项(源代码:),但我得到了“ValueError:点必须具有x、y和z坐标这里是在PytCloud中读取pcd文件的基本代码:”。数据输出被告知格式正确,尤其是下面描述的pypcd代码应该与out.pcd输入一起使用

我的目标是获得答案:

  • 如何调试加载pypcd库时的错误
  • 如果我不能;我应该如何制定x、y、z坐标输入,以便在pyntcloud中查看pcd数据,如果没有,则
  • 为了查看和可视化基于.csv的数据,下一步可以采取哪些步骤
解决方案我累了:

  • 主要的解决方案是在pypcd中直接查看pcd文件,一位开发人员为此提出了以下代码作为解决方案,但描述的pypcd/python lzd错误总是发生:
  • 从pypcd导入pypcd 将numpy作为np导入 #来自环球一号 进口numpy

    def read_files():
    names = glob("*pcd")
    names = sorted(names)
    data = []
    for item in names:
        cloud = pypcd.PointCloud.from_path(item)
        data.append(cloud)
    
    print(names)
    gridx = []
    gridy = []
    pos_3d_x = []
    pos_3d_y = []
    pos_3d_z = []
    normal_x = []
    normal_y = []
    normal_z = []
    for item in data:
        gridx.append(item.pc_data["grid_pos_x"])
        gridy.append(item.pc_data["grid_pos_y"])
        pos_3d_x.append(item.pc_data["pos_3d_x"])
        pos_3d_y.append(item.pc_data["pos_3d_y"])
        pos_3d_z.append(item.pc_data["pos_3d_z"])
        normal_x.append(item.pc_data["normal_x"])
        normal_y.append(item.pc_data["normal_y"])
        normal_z.append(item.pc_data["normal_z"])
    
    point_clouds = []
    for i in range(0, len(names)):
        point_cloud = np.array([np.array(gridx[i]), np.array(gridy[i]), np.array(pos_3d_x[i]), np.array(pos_3d_y[i]), np.array(pos_3d_z[i]), np.array(normal_x[i]), np.array(normal_y[i]), np.array(normal_z[i])])
        point_clouds.append(point_cloud)
    
    return np.array(point_clouds)
    
    点云=读取文件() 打印(点云)

    2.1第二个解决方案(在pyntcloud或open3d中的实现中)是允许查看和处理.csv格式的pcd文件,但与直接打开和查看.pcd文件相比,将其可视化听起来要复杂得多,对于大多数直截了当的解决方案考虑.Effice文件格式,在这种情况下,这种文件格式是不可能使用的。 使用下面的pandas命令,我成功地检索了第3行中的54个.csv列,这些列将与其对应的值分开(请参见下面的图片,请参见jupyter中的输出)

    但是我不知道如何可视化.csv数据,所以我尝试了

    2.2研究pyntcloud库,它应该是一个更先进、支持更好的库,但在尝试了以下代码示例后,我得到了两种情况下的“ValueError:点必须具有x、y和z坐标”

    my_point_cloud = PyntCloud.from_file("/content/dfs_dot_cloud_primary.pcd")
    my_point_cloud.to_file("out_file.obj", internal=["points", "mesh"], header=0, names=["pos_3d_x","pos_3d_y","pos_3d_z"])
    

    2.3最后一个额外的解决方案是open3d库,但我无法理解代码,因为之前的挫折而放弃了

    上下文的一些背景信息:

    一,

    二,

    三,

    四,

    五,

    my_point_cloud = PyntCloud.from_file("/content/dfs_dot_cloud_primary.pcd")
    my_point_cloud.to_file("out_file.obj", internal=["points", "mesh"], header=0, names=["pos_3d_x","pos_3d_y","pos_3d_z"])
    
    from pyntcloud import PyntCloud
    my_point_cloud = PyntCloud.from_file("/content/dfs_dot_cloud_primary.pcd")
    my_point_cloud.to_file("out_file.obj", header=0, skiprows=2, sep=";")