Pandas 如何在Python中打开和查看pcd文件?
问题描述: 我需要查看此特定格式(非ply)的pcd(点云数据)文件。我已经测试了一些库,如pypcd(主要解决方案)和一些替代方案,如pyntcloud(次要解决方案)、open3d、python pcl和pcd3ply,如解决方案建议书1中所述。二,。在下面1.我还添加了相关的.pcd文件,我的开发人员朋友说该文件与建议的代码一起运行 我在这个问题的末尾添加了一个相关的.pcd文件示例,以及图片2和3中.csv文件的数据集标题的屏幕截图。我已经使用一个名为CloudCompare的开源软件查看了.pcd文件,我将从中在本文末尾的图片中添加屏幕截图 .csv导出中数据集的头部如下所示(第一行包括时间戳,第二行是一些未知整数,第三行是以下54个参数,其中前8个参数处理x、y、z点云坐标,然后是RGB数据输入等):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的开源软件查
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的数据,下一步可以采取哪些步骤
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=";")