当前位置: 首页 > news >正文

0基础新手教程:COLMAP3.8将bin转为txt再转为json文件(附代码),其它类型同理

前提:电脑已安装colmap3.8

看一下colmap3.8对类型转换的提供的参数(主要使用 --project_path、--input_path、--output_path、--output_type):


1.使用命令行将bin文件转为txt文件(红色路径替换为你的实际路劲):
colmap model_converter --input_path"D:\3DGS\data\yangzl260314\sparse\0"--output_path"D:\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\0

import 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[i+1].split() pts2d = [] for j in range(0, len(pts_line), 3): x = float(pts_line[j]) y = float(pts_line[j+1]) p3d_id = int(pts_line[j+2]) 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[j+1]) 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", required=True, type=str) 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", encoding="utf-8") as f: json.dump(cameras, f, indent=2, ensure_ascii=False) with open(os.path.join(args.input, "images.json"), "w", encoding="utf-8") as f: json.dump(images, f, indent=2, ensure_ascii=False) with open(os.path.join(args.input, "points3d.json"), "w", encoding="utf-8") as f: json.dump(points3d, f, indent=2, ensure_ascii=False) print("转换成功!")

这样就得到最终结果了:

3.看一下points3d.json的内容:

http://www.jsqmd.com/news/603423/

相关文章:

  • 不用U盘也能重装系统?玩酷之家一键重装让你桌面秒装Windows!
  • 5个高效步骤:Win11Debloat让Windows系统卡顿彻底解决
  • windows10 休眠恢复后 系统卡顿,浏览器卡顿 解决办法
  • 2026年4月如何集成OpenClaw?云端保姆级教程:安装及大模型API、Skill集成
  • 中科院科学家研究中国光钟刷新计时极限 300亿年不差1秒
  • 全能 Markdown 在线编辑器推荐:支持微信/知乎排版、Mermaid、LaTeX,一键导出 PDF/PNG
  • WT901C-485传感器磁场校准总不准?可能是这几点你没注意(附替代方案)
  • 关于MCN的问题
  • UI自动化测试详解
  • Win11Debloat系统优化完全指南:从卡顿诊断到性能重生
  • Cursor Pro全功能体验技术突破:设备身份重置与功能解锁完全指南
  • 最新全开源版本 网站自助广告投放系统源码 附安装教程
  • 公众号配图设计:提升视觉吸引力的实用技巧
  • 【限时解禁】ISO C++委员会内部流出的C++27反射设计决策纪要(含Bjarne亲自批注):为何放弃constexpr反射而选择属性驱动模型?
  • 如何用Sunshine打造个人专属的游戏云服务:从零开始搭建高性能串流服务器
  • 开源工具Jellyfin Bangumi插件:媒体管理与元数据同步的高效解决方案
  • 2026年陕西省肝病诊疗领域优秀医生推荐 - 深度智识库
  • 甘肃工程资质代办哪家强?7大本地机构优势对比与甄选核心维度 - 深度智识库
  • 在线设计工具:从入门到精通的实用指南
  • 【Finetune学习】01:为什么你的大模型需要“再学习“?
  • 基于单片机的智能定时器设计
  • Windows系统Btrfs文件系统实用指南
  • 2026探寻国内火锅店商铺装修公司,餐饮装修设计优选有哪些,商铺餐饮装修/厂房装修,餐饮装修设计厂家多少钱一平米 - 品牌推荐师
  • 第四章:Agents技术入门解析
  • 如何用ULTIMATE ANIMATION COLLECTION打造3A级游戏动画效果?Unity 2022实战案例解析
  • AI驱动简化:让快马平台的Kimi帮你设计opcore simlify架构
  • 想快速构建Spring Boot完整知识体系,看这篇就够了!
  • E-Hentai漫画下载器终极指南:三步实现批量漫画一键打包
  • Python无锁并发革命:3种主流GIL-free运行时(PyPy、Trio、Rust-Python)压测结果首次公开
  • 莱茵优品联系方式查询:探讨企业联系信息获取途径与使用时的审慎考量 - 品牌推荐