CloudFunc.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import numpy as np
  2. import open3d as o3d
  3. # 读取文件
  4. def open_file(file_path):
  5. """
  6. 读取文件
  7. :param file_path: 文件路径
  8. :return: 读取的内容
  9. """
  10. if '.txt' in file_path:
  11. print('txt文档')
  12. pcd = o3d.io.read_point_cloud(file_path, format='xyz')
  13. else:
  14. pcd = o3d.io.read_point_cloud(file_path)
  15. return pcd
  16. def save_file(content, file_path, write_ascii=True):
  17. """
  18. 保存文件
  19. :param write_ascii: 是否使用ASCII编码
  20. :param content: 文件内容
  21. :param file_path: 保存路径
  22. :return: None
  23. """
  24. if '.txt' in file_path:
  25. np.savetxt(file_path, np.asarray(content.points), fmt='%f %f %f')
  26. else:
  27. o3d.io.write_point_cloud(file_path, content, write_ascii=write_ascii)
  28. def voxel_down_sample(pcd, voxel_size):
  29. """
  30. 体素方法点云降采样
  31. :param pcd: 点云数据
  32. :param voxel_size: 体素降采样的网格长度
  33. :return: 降采样点云数据
  34. """
  35. return pcd.voxel_down_sample(voxel_size=voxel_size)
  36. def add_rgb_to_pcd(pcd):
  37. """
  38. 给点云天啊及颜色信息
  39. :param pcd: 点云数据
  40. :return:
  41. """
  42. # 为点云中的每个点指定RGB颜色,这里我们使用红色作为示例
  43. # RGB值范围为[0, 1],红色可以表示为(1, 0, 0)
  44. pcd = np.asarray(pcd.points).shape[0]
  45. colors = np.repeat([[1, 0, 0]], pcd, axis=0) # 创建一个全是红色的颜色数组
  46. # 将颜色信息添加到点云对象中
  47. pcd.colors = o3d.utility.Vector3dVector(colors)
  48. return pcd
  49. def pcd_visualization(pcd):
  50. """
  51. 可视化点云数据
  52. :param pcd: 点云数据
  53. :return: None
  54. """
  55. o3d.visualization.draw_geometries([pcd],
  56. zoom=0.3412,
  57. front=[0.4257, -0.2125, -0.8795],
  58. lookat=[2.6172, 2.0475, 1.532],
  59. up=[-0.0694, -0.9768, 0.2024])