# CloudViewer
**Repository Path**: xuxincode/CloudViewer
## Basic Information
- **Project Name**: CloudViewer
- **Description**: 基于 Qt 和 PCL 开发的点云可视化软件
- **Primary Language**: C++
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 14
- **Forks**: 12
- **Created**: 2020-02-19
- **Last Updated**: 2025-06-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CloudViewer
## 版本更新
#### V 1.0.1
1. 新增 `Save as binary` 功能。将点云保存为二进制文件,载入速度更加快。
2. 优化 `Console` 窗口。`Open` 和 `Add` 点云文件时,Console 窗口会显示载入点云所花的时间。
3. 优化 `文件对话框`。 `Open` 、 `Add` 和 `Save`点云文件时,会默认从上次目录打开,而不是 `V 1.0.0`中每次都从桌面目录打开。
## CloudViewer 简介
CloudViewer (点云可视化软件)是一款面向三维点云数据处理、点云开发专业人员及爱好者的三维点云可视化软件,该软件具备以下功能:
1. **点云 IO**。常见点云格式文件(如 ply, pcd 和 obj)的读取、保存、删除清空及可视化。
2. **点云的基本操作**。设置点云颜色,合并多个点云,点云格式转换等。
3. **可视化的基本操作**。设置视图窗口背景颜色,设置点云的可视化尺寸,设置坐标系的显示,设置视图方位(Main view, Left view, Top view),网格面片显示,网格线框显示等。
4. **模型生成**。生成简单立方排布的点云以及基本三维模型,该功能主要用于测试。
5. **软件界面基本功能**。软件由: [1] 菜单栏、[2] 工具栏、[3] 资源管理树、[4] 属性管理器、[5] 输出窗口、[6] 状态栏、[7] 视图窗口以及 [8] RGB 窗口组成。其中部分都是停靠窗口,可以在菜单栏的视图选项设置是否显示,方便用户自定义软件界面。软件还提供 Windows 和 Darcula 两大主题,其中 Darcula 主题为默认主题,仿照 Visual Studio 和 Android Studio 相应暗系主题设计,极具极客风范。不过为了适应大部分用户,本手册中的示例都是在 Windows 主题下操作的。
## CloudViewer 下载及声明
1. **软件下载**:[CloudViewer 下载](http://on2kkr82s.bkt.clouddn.com/CloudViewer.rar) (软件大小 23.7 MB,目前仅支持 Windows 系统)。
2. Github 源码:https://github.com/nightn/CloudViewer (欢迎 Star 和 Fork)
3. 使用手册:http://nightn.com/2017/04/15/cloudviewer/
4. 开发环境:CloudViewer 是用 Windows 10 (64 位) 系统下的 Mircosoft Visual Studio Professional 2013,结合使用 Qt 5.7.0 (64 位) 及 PCL 1.8.0 (64 位) 等开源库进行开发的。
5. 资源使用:软件所使用的图片资源均来源于 [www.easyicon.net](http://www.easyicon.net)。
6. 声明:本软件用作分享与学习,若转载请注明出处,勿作任何商业用途。
## CloudViewer 使用
### 1. 点云 IO
点云 IO 操作主要包括 `Open`, `Add`, `Save`, `Clear` 和 `Change` 等。
#### 1.1 打开点云
**[重要说明] 点云存放路径不能有中文字符,否则点云不能正常打开!**
点云是由很多个具有三维坐标 x, y, z 的点组成的数据格式,除了位置信息外,点云还可以包含颜色信息(点云的 RGB 值)、透明信息、法线信息等。目前常用的点云格式有 pcd, ply 以及 obj 格式。打开这三种格式的点云主要通过 Qt 库的文件对话框和 PCL 库中载入点云数据的相关 API 实现。
点云 IO 的常用操作可以在 `File` 菜单及工具栏中找到:
打开动作 `Open` 的实现效果如下图,支持多选进行批量打开。
#### 1.2 添加点云
点云处理中,有时需要同时对多个点云在同一视图窗口进行可视化和处理。添加点云 `Add` 每次可以添加一个或多个点云文件,而不会清空后台已经缓存的点云数据,也不会清空视图窗口已经显示的点云模型。理论上,添加点云的数量没有限制。`Add` 实现效果如下图(为了便于区分,将点云设置成了不同颜色):
#### 1.3 保存点云
保存点云 `Save` 有两个特点:
- **多类型保存**。`Open` 可以实现对 pcd, ply 和 obj 等格式文件的多类型打开,`Save` 也可以将文件保存成 pcd, ply 等多种类型,这样也就实现了点云的格式转换功能:
- **多文件保存**。CloudViewer 还能将视图窗口显示的所有点云保存为同一个文件,实现了多文件的合并保存。
#### 1.4 清空点云
清空点云 `Clear` 可将视图窗口中的所有点云模型及后台缓存数据清空。
#### 1.5 点云格式转换
格式转换 `Change` 暂时未做实现。因为通过 `Open` 和 `Save` 就可以完成点云格式转换。
### 2. 点云基本操作
点云基本操作会直接影响点云文件的内容,基本功能包括**改变点云颜色**、**点云格式转换**、**点云合并**等。
#### 2.1 改变点云颜色
点云中的点不但具有三维信息(x, y, z 坐标),还具有颜色信息(R, G, B),为了更形象地描述点云模型,抑或是为了区分不同点云模型,出于这样的目的,我们需要对点云模型的颜色进行修改。具体包括的功能为:
- 调整RGB值改变单一点云文件颜色。
- 在多个点云同时显示时,通过在资源管理树的item进行选择,实现对某一个选定的点云进行颜色变换。
- 既可以通过滑块控件设置RGB,又可以通过颜色对话框来选择具体颜色。
- 随机上色功能。
#### 2.2 点云格式转换
点云文件的格式种类非常多,常见的能用 PCL 库直接处理的包括 ply, pcd 等,三维扫描仪保存的 wrl 格式。我们往往需要对点云格式进行转换,但是目前存在的主流点云软件,如 Geomagic Studio,Rapidform,MeshLab 等对点云格式转换的支持并不令人满意(比如 Geomagic Studio 能够导入ply文件并对其进行操作,但却不能保存为 ply,只能保存为 wrl。然后需要利用 MeshLab 将 wrl 转换为 ply,最后还需要利用自己写的程序将 ply 转为 pcd,过程非常麻烦!)
CloudViewer 目前实现了多种点云格式的相互转换(wrl文件的转换还有待进一步开发),通过打开并另存为即可实现三种不同点云格式之间的相互转换,打开和保存的实现可以参见上述部分。如下图:
#### 2.3 合并点云
点云合并 = “多点云打开” + “多点云保存”。上述打开和保存功能已经实现了点云合并功能,在此不再赘述。
### 3. 可视化基本操作
可视化基本操作主要包括**设置背景颜色**,**设置点云的可视化尺寸**,**设置视图方位**(Main view, Left view, Top view),**网格面片显示**以及**网格线框显示**等。
#### 3.1 设置背景颜色
视图窗口中的点云颜色可以更改,背景颜色亦然,效果如下:
#### 3.2 设置点云可视化尺寸
点云由很多点构成,每个点本身具有颜色信息,但是没有尺寸大小的信息。但需要以不同大小进行显示,这是可视化的任务,不涉及对点云本身的修改。设置点云可视化尺寸功能效果如下,分别对应size = 1, 2, 3时点云的大小,为了不影响点云操作,允许的最大尺寸为10(因为点的尺寸越大,渲染速度越慢,对点云的操作也不方便)。
#### 3.3 设置视图方位
设置可视化的视图方位提供了三种不同的视图,主视图(Main View),左视图(Left View)和俯视图(Top View),通过选择相应的视图方位,实现对点云更加快捷的操作。设置视图方位效果如下:
#### 3.4 网格面片显示及网格线框显示
PCL库中提供了非常强大的点云处理功能。在CloudViewer中,实现了点云的网格面片显示和网格线框显示,实现分为三步:点云法线估计,曲面重建和网格显示。显示效果如下:
- 网格面片显示:
- 网格线框显示:
### 4. 模型生成
#### 4.1 立方点云生成
这是一个非常简单但很实用的功能,当你没有点云数据时,可以通过这个功能,生成一个由50000个点随机排布成的立方,如下图所示:
#### 4.2 基本三维模型生成
仅实现了球体的生成。球体生成效果如下图所示:
### 5. 其他功能
#### 5.1 停靠窗口的显示与隐藏
CloudViewer 包含四个停靠窗口:资源管理树(Data Manager)、属性管理器(Property Manager)、输出窗口(Console)以及RGB窗口(RGB Manager)。通过 View 菜单的选项可以实现停靠窗口的显示及隐藏。
#### 5.2 Console 窗口
输出窗口提供了记录你的操作日志,方便查看,通过右击选择 `Clear` 可以进行清空,如果你觉得输出窗口没有必要,也可以通过右击选择 `Disable console` 和 `Enable console` 来禁用或使用输出窗口。
#### 5.3 资源管理树
资源管理树显示了当前打开的所有点云,可以通过单选或多选,然后右键,进行点云的隐藏、显示、删除设置颜色等操作,非常快捷。
#### 5.4 属性管理器
属性管理器记录了选中点云的一些属性:选中点云的点的数量、RGB 信息,还包括打开的点云的总个数,及所有点云点的数量等。
#### 5.5 关于
通过 `Help` 可以访问我的博客,查看 CloudViewer 的使用手册(后续会出开发手册)。`About` 界面记录了 CloudViewer 的版本信息和开发者信息。
## CloudViewer 总结
CloudViewer 作为一款点云可视化软件,提供了多点云类型,多文件的读取和写入,并实现了点云类型的转换及点云模型的合并。在此基础上,还提供了丰富的可视化操作,如设置点云颜色及尺寸,设置显示背景颜色,点云的网格面片显示,点云的网格线框显示等;此外,还提供了简单的模型生成及绘制功能,如生成立方随机排布的点云模型,绘制基本三维模型如球体和圆柱体等。在界面上,综合运用了 VTK 显示窗口,停靠窗口,文件树窗口,列表窗口,菜单栏,工具栏,状态栏等一系列 Qt 控件,并建立了功能丰富的多种信号槽联系。
在实际测试中,点云的读取和处理速度也非常快,在本机打开包含 50000 个点的点云文件,耗时不超过1秒,打开包含 170000 个点的点云文件,耗时 3 秒左右。而且在程序设计中,综合考虑了各种用户可能会执行的违规操作,为了防止软件崩溃,对多种错误操作进行了合理反馈。
CloudViewer 还有进一步提升的空间。作为一款点云可视化软件,在后期开发中应该会加入少量三维点云处理的功能,如多角度拍摄的点云进行拼接,点云三角化及光学渲染等。最后,比较重要的一点是,软硬件结合,由于实验室常用微软的 Kinect2.0 获取点云数据,但是微软自带的 SDK 采集到的数据不能很好的反应点云的颜色信息(颜色是根据深度信息来确定的,而不是物体的实际颜色),因此,还可以考虑增加 CloudViewer 与 Kinect 连接及实时可视化的功能。相信随着更多功能的添加,CloudViewer 能够更加胜任在实际实验中的点云获取,点云可视化和点云处理的方方面面。