match_pcd_new_jpg.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import os
  2. import shutil
  3. def match_pcd_meta_tiff(image_json_folder, pcd_folder, depth_tiff_folder,
  4. output_pcd_folder, output_meta_folder, output_tiff_folder):
  5. os.makedirs(output_pcd_folder, exist_ok=True)
  6. os.makedirs(output_meta_folder, exist_ok=True)
  7. os.makedirs(output_tiff_folder, exist_ok=True)
  8. # PCD 前缀集合(去掉后缀 .pcd)
  9. pcd_prefixes = {
  10. os.path.splitext(f)[0] for f in os.listdir(pcd_folder) if f.lower().endswith('.pcd')
  11. }
  12. # image_json_folder 中的 jpg 和 json 文件(带 _color 后缀)
  13. all_files = os.listdir(image_json_folder)
  14. color_jpgs = [f for f in all_files if f.lower().endswith('_color.jpg')]
  15. jsons = [f for f in all_files if f.lower().endswith('_color.json')]
  16. # 生成前缀映射,去掉后缀 _color.jpg / _color.json
  17. jpg_prefix_map = {f[:-10]: f for f in color_jpgs} # '_color.jpg' 长度是10
  18. json_prefix_map = {f[:-11]: f for f in jsons} # '_color.json' 长度是11
  19. # depth_tiff_folder 中的深度图文件,文件名以 _depth.tiff 或 _depth.tif 结尾
  20. tiff_files = [f for f in os.listdir(depth_tiff_folder) if f.lower().endswith(('.tiff', '.tif'))]
  21. # 去掉 _depth.tiff 后缀得到前缀
  22. tiff_prefix_map = {}
  23. for f in tiff_files:
  24. if f.lower().endswith('_depth.tiff'):
  25. prefix = f[:-11] # 去掉 '_depth.tiff' (11个字符)
  26. elif f.lower().endswith('_depth.tif'):
  27. prefix = f[:-10] # 去掉 '_depth.tif' (10个字符)
  28. else:
  29. continue
  30. tiff_prefix_map[prefix] = f
  31. # 找到同时有 pcd、jpg、json、tiff 的 prefix
  32. matched_prefixes = []
  33. for prefix in pcd_prefixes:
  34. if (prefix in jpg_prefix_map and
  35. prefix in json_prefix_map and
  36. prefix in tiff_prefix_map):
  37. matched_prefixes.append(prefix)
  38. print(f"共发现 {len(pcd_prefixes)} 个 pcd 文件")
  39. print(f"共发现 {len(color_jpgs)} 个 jpg (_color.jpg) 文件")
  40. print(f"共发现 {len(jsons)} 个 json (_color.json) 文件")
  41. print(f"共发现 {len(tiff_files)} 个 tiff (_depth.tiff/.tif) 文件")
  42. print(f"匹配到 {len(matched_prefixes)} 组文件")
  43. # 复制匹配文件到对应输出文件夹
  44. for prefix in matched_prefixes:
  45. pcd_src = os.path.join(pcd_folder, prefix + '.pcd')
  46. jpg_src = os.path.join(image_json_folder, jpg_prefix_map[prefix])
  47. json_src = os.path.join(image_json_folder, json_prefix_map[prefix])
  48. tiff_src = os.path.join(depth_tiff_folder, tiff_prefix_map[prefix])
  49. pcd_dst = os.path.join(output_pcd_folder, prefix + '.pcd')
  50. jpg_dst = os.path.join(output_meta_folder, jpg_prefix_map[prefix])
  51. json_dst = os.path.join(output_meta_folder, json_prefix_map[prefix])
  52. tiff_dst = os.path.join(output_tiff_folder, tiff_prefix_map[prefix])
  53. shutil.copy2(pcd_src, pcd_dst)
  54. shutil.copy2(jpg_src, jpg_dst)
  55. shutil.copy2(json_src, json_dst)
  56. shutil.copy2(tiff_src, tiff_dst)
  57. print(f"复制完成,匹配了 {len(matched_prefixes)} 组文件。")
  58. if __name__ == "__main__":
  59. image_json_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\0525保存xyz信息的jpg+0516修订后的json"
  60. pcd_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\pcd"
  61. depth_tiff_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\depth_tiff"
  62. output_pcd_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的pcd"
  63. output_meta_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的json_jpg"
  64. output_tiff_folder = r"\\192.168.50.222\share\zyh\5月彩色钢板数据汇总\513-515数据汇总\匹配后的depth_tiff"
  65. match_pcd_meta_tiff(image_json_folder, pcd_folder, depth_tiff_folder,
  66. output_pcd_folder, output_meta_folder, output_tiff_folder)