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

PLY文件格式讲解与可视化展现方式(基于Viser库)

PLY文件格式介绍

.plyPolygon File Format / Stanford Triangle Format)是一种专门为 3D点云与网格 设计的文件格式,广泛用于像 COLMAP、Open3D、Meshlab、Blender 等软件中。

如果看到文件头以下的内容为乱码,则说明是用的二进制格式储存的

还原成ascii编码:


o3d.io.write_point_cloud("/data/xxx/projects/colmap/mycolmap_project/dense/fused_ascii.ply", pcd, write_ascii=True)

实例展示:

注意:颜色被归一化到 [0, 1] 范围。还原方法:

import numpy as np
colors_256 = (np.asarray(pcd.colors) * 255).astype(np.uint8)

PLY文件可视化:

可视化方式1:直接下载到mac用meshlab打开

可视化方式2: windows用户应该可以用可视化代码基于mobaXterm的方式打开

可视化方式3: 使用html打开

使用下面的main.js文件:


import * as THREE from 'https://esm.sh/three@0.158.0';
import { OrbitControls } from 'https://esm.sh/three@0.158.0/examples/jsm/controls/OrbitControls';
// import { PLYLoader } from 'https://cdn.jsdelivr.net/npm/three@0.158.0/examples/jsm/loaders/PLYLoader.js';
import { PLYLoader } from 'https://esm.sh/three@0.158.0/examples/jsm/loaders/PLYLoader';// 创建场景
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x222222);// 相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.01, 1000);
camera.position.z = 2;// 渲染器
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);// 控制器
const controls = new OrbitControls(camera, renderer.domElement);// 加载 PLY 文件(注意路径相对于 index.html)
const loader = new PLYLoader();
loader.load('./mycolmap_project/dense/fused.ply', function (geometry) {geometry.computeVertexNormals(); // 可选:计算法线const material = new THREE.PointsMaterial({ color: 0x00ff00, size: 0.005 });const points = new THREE.Points(geometry, material);scene.add(points);
}, 
// 加载进度
(xhr) => {console.log((xhr.loaded / xhr.total * 100).toFixed(2) + '% loaded');
},
// 加载出错
(error) => {console.error('Error loading PLY file:', error);
});// 动画循环
function animate() {requestAnimationFrame(animate);controls.update();renderer.render(scene, camera);
}
animate();// 自适应窗口大小
window.addEventListener('resize', () => {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);
});

用下面的demo.html文件进行可视化:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>COLMAP PLY Point Cloud Viewer</title><style>body { margin: 0; }canvas { display: block; }</style>
</head>
<body><!-- 加载我们单独写的 main.js --><script type="module" src="./main.js"></script>
</body>
</html>

但是效果不是很好,而且很难调整角度

可视化方式3:使用viser库

https://viser.studio/main/examples/demos/colmap_visualizer/https://viser.studio/main/examples/demos/colmap_visualizer/

代码:核心的部分就是提取PLY文件的xyz和rgb的部分,然后直接接到Viser的接口进行可视化即可,同时Viser还支持COLMAP的格式,参见其文档:

import numpy as np
import open3d as o3d
import viserdef main():server = viser.ViserServer()# add PLY point cloudpcd = o3d.io.read_point_cloud("/data/xxx/projects/colmap/mycolmap_project/dense/fused.ply")points = np.asarray(pcd.points)colors = np.asarray(pcd.colors)print(points.shape)print(colors.shape)server.scene.add_point_cloud(name="/fused_cloud",points=points,colors=colors,point_size=0.03,)print("Point cloud visualization loaded!")print("- Spiral point cloud with height-based colors")print("- Random noise point cloud with random colors")print("Visit: http://localhost:8080")while True:passif __name__ == "__main__":main()

可视化效果:

这个库很好用,而且很好调整

http://www.dtcms.com/a/490712.html

相关文章:

  • 中山百度网站排名织梦播放器网站
  • 珠海建站网站兰州模板网站seo价格
  • jQuery面试题精选:从基础到高级
  • 计算机操作系统:死锁概述
  • C++之理解共用体
  • Java Spring配置
  • 【多进线程】python多进线程与通信
  • 低代码新建表单实操:纯表单 / 列表表单配置 + 表名避坑
  • 前端做数据表格的网站网站建设与运营市场风险
  • 从入门到精通:深度探索RT-Thread物联网操作系统
  • GPUStack:开源GPU集群管理工具,解锁AI模型高效运行新可能
  • LeetCode算法日记 - Day 74: 按摩师、打家劫舍II
  • centos离线包获取-附centos7主流离线包资源
  • 电子商务网站建设哪好网站内链建设
  • 网站建设的主题软媒win7优化大师
  • 人力网站建设的建议软文平台发布
  • 【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
  • 开源 C++ QT QML 开发(二十一)多媒体--视频播放
  • PMBT2222A,215 开关晶体管功率二极管 NXP安世半导体 音频放大电路 LED驱动 应用
  • 大语言模型(LLM)入门笔记:嵌入向量与位置信息
  • 网站设计济南做网站的一定要开80或8080端口
  • 【Spring Boot从入门到精通】原理、实战与最佳实践
  • uni-app 入门学习教程,从入门到精通,uni-app 基础知识详解 (2)
  • Pyspark分布式访问NebulaGraph图数据库
  • FPGA----petalinux的Ubuntu文件系统移植
  • 宜昌网站建设厂家wordpress 扁担
  • TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例
  • Eureka: Human-Level Reward Design via Coding Large Language Models 译读笔记
  • 随时随地看监控:我的UptimeKuma远程访问改造记
  • 关于网站篡改应急演练剧本编写(模拟真实场景)