前提电脑已安装colmap3.8看一下colmap3.8对类型转换的提供的参数主要使用 --project_path、--input_path、--output_path、--output_type1.使用命令行将bin文件转为txt文件红色路径替换为你的实际路劲colmap model_converter --input_pathD:\3DGS\data\yangzl260314\sparse\0--output_pathD:\3DGS\data\yangzl260314\sparse\0--output_type TXT下面是colmap跑出来的D:\3DGS\data\yangzl260314\sparse\0文件夹下的bin文件:执行后命令行后就得到了points3D.txt、images.txt、cameras.txt以points3D.txt为例查看一下里面的内容发现内容很杂乱不易于阅读因此转为json文件阅读更方便2.使用代码将txt转为json文件代码如下红色路径替换为你的实际路劲直接执行即可pythonD:\3DGS\data\yangzl260314\convert.py-iD:\3DGS\data\yangzl260314\sparse\0import json import os from argparse import ArgumentParser def parse_colmap_cameras(camera_path): cameras {} with open(camera_path, r) as f: for line in f: line line.strip() if not line or line.startswith(#): continue parts line.split() cam_id int(parts[0]) model parts[1] width int(parts[2]) height int(parts[3]) params list(map(float, parts[4:])) cameras[cam_id] { camera_id: cam_id, model: model, width: width, height: height, params: params } return cameras def parse_colmap_images(image_path): images {} with open(image_path, r) as f: lines [line.strip() for line in f if line.strip() and not line.strip().startswith(#)] for i in range(0, len(lines), 2): img_line lines[i].split() img_id int(img_line[0]) qw, qx, qy, qz map(float, img_line[1:5]) tx, ty, tz map(float, img_line[5:8]) cam_id int(img_line[8]) name img_line[9] pts_line lines[i1].split() pts2d [] for j in range(0, len(pts_line), 3): x float(pts_line[j]) y float(pts_line[j1]) p3d_id int(pts_line[j2]) pts2d.append([x, y, p3d_id]) images[img_id] { image_id: img_id, quaternion: [qw, qx, qy, qz], translation: [tx, ty, tz], camera_id: cam_id, name: name, points2d: pts2d } return images def parse_colmap_points3d(points_path): points3d {} with open(points_path, r) as f: for line in f: line line.strip() if not line or line.startswith(#): continue parts line.split() p3d_id int(parts[0]) x, y, z map(float, parts[1:4]) r, g, b map(int, parts[4:7]) error float(parts[7]) track [] for j in range(8, len(parts), 2): img_id int(parts[j]) p2d_idx int(parts[j1]) track.append([img_id, p2d_idx]) points3d[p3d_id] { point3d_id: p3d_id, xyz: [x, y, z], rgb: [r, g, b], error: error, track: track } return points3d if __name__ __main__: parser ArgumentParser(Convert bin to json) parser.add_argument(--input, -i, requiredTrue, typestr) args parser.parse_args() camera_file os.path.join(args.input, cameras.txt) image_file os.path.join(args.input, images.txt) points_file os.path.join(args.input, points3D.txt) # 解析 cameras.txt、images.txt、points3D.txt cameras parse_colmap_cameras(camera_file) images parse_colmap_images(image_file) points3d parse_colmap_points3d(points_file) # 分别保存 cameras.json、images.json、points3D.json with open(os.path.join(args.input, cameras.json), w, encodingutf-8) as f: json.dump(cameras, f, indent2, ensure_asciiFalse) with open(os.path.join(args.input, images.json), w, encodingutf-8) as f: json.dump(images, f, indent2, ensure_asciiFalse) with open(os.path.join(args.input, points3d.json), w, encodingutf-8) as f: json.dump(points3d, f, indent2, ensure_asciiFalse) print(转换成功)这样就得到最终结果了3.看一下points3d.json的内容