一、环境准备
CloudCompare
文档地址:https://www.cloudcompare.org/
CloudCompare源码分为以下几个块:
CCLib (core algorithms)
qCC_db (data library)
qCC_io (file I/O library)
qCC_gl (3D display library)
qCC (main application)
CloudCompare借由CCLib,qCC_db,qCC_io,qCC_gl几个块在qCC中实现软件的主要功能。
源码地址:https://github.com/CloudCompare/CloudCompare
笔者工作环境
工具 | 版本 |
---|---|
Visual Studio | 2022 |
QT | 5.15.2 |
CMake | 3.24.2 |
二、编译CloudCompare
编译可以参考官方的编译文档:https://www.cloudcompare.org/doc/wiki/index.php/Compilation
1.CMake编译
- 第一次Configure会报错/libs/qCC_db/extern/CCCoreLib没东西,需要将https://github.com/CloudCompare/CCCoreLib的内容下载下来放到/libs/qCC_db/extern/CCCoreLib/下。
- 配置一下QT的环境,虽然在PATH中配置好了会被自动找到。
- 第一个参数选了scalar就用double表示,不选就是float,第二个生成动态库,第三个参数是否使用CGAL这个几何图形计算库,第四个参数是否使用QT中的多线程,第五个参数是否使用英特尔的TBB的多线程,第六个参数是否使用内存泄漏可视化工具。这里只使用最基础的选项。
- 再次点击configure,设置CMAKE_INSTALL_PREFIX的位置。
- 点击generate,编译配置结束。
- 打开build文件夹中的工程。
- 选择需要的版本,生成INSTALL。
- 生成成功,install路径中就有了诸多动态库。
- 将生成的所有dll都复制到\build\qCC\Release\ 下,若选择的Debug则放在Debug下。
- 将CloudCompare设置为启动项目。
- 运行后报错。
- 原因是程序执行时,默认会在当前目录下查找库文件,解决方法就是把QT的\plugins\platforms下的动态库文件拷贝到\build\qCC\Release\plugins\platforms\ 下。这里需要自己建文件夹。
- 到这里,就可以运行CloudCompare了。
- 这一步得到了CloudCompare的几个动态库文件,下一步将进行CloudCompare的二次开发。
三、添加自定义模块
1.目的
CloudCompare是一款好用的开源点云测量操作软件,我对其进行二次开发的目的是希望能够添加获取点云的方式。获取点云的方式使用的是结构光三维成像技术中的一类,即使用投影仪和相机来获取物体的三维面形。为达此目的,需要添加相机的操作、显示界面,结构光三维成像的算法。
2. 操作步骤
- 功能主要是实现两个窗口,一个是相机窗口,负责相机的数据转换字节数据转QImage,一个是相机显示(需要将显示窗口提升为相机窗口)投影仪控制和相机控制,重建显示,日志等都可以依托CloudCompare本身的功能。
- 可以看到.ui文件都是自定义生成的,我们可以照葫芦画瓢来定义我们的ui文件。
命令行
setlocal
C:\Qt\5.15.2\msvc2019_64\bin\uic.exe -o D:/CODEWORKPLACE/cc2/build/qCC/ui_FPPDlg.h D:/CODEWORKPLACE/cc2/build/qCC/FPPDlg.ui
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
说明
Generating ui_FPPDlg.h
输出
D:\CODEWORKPLACE\cc2\build\qCC\ui_FPPDlg.h
我们先定义好需要的两个类,改动这两个类的ui文件的生成工具。
-
新添加的.h文件也需要自定义,先把QT的moc.exe放到当前的路径下。
命令行
moc.exe D:\CODEWORKPLACE\cc2\build\qCC\FPPDlg.h -o D:\CODEWORKPLACE\cc2\build\qCC\moc_FPPDlg.cpp
输出
moc_FPPDlg.cpp
附加依赖项
moc.exe
FPPDlg.h -
生成moc_FPPDlg.cpp后,将cpp文件添加到项目中。
-
添加自定义类的方法就是如此简单,接下来就是自己设计类,实现自己想要的功能啦。
四、效果展示
自定义界面
- 暂且只添加了拍摄和重建的功能,更多的功能可以陆续完善。
重建结果
-
点击重建后,利用逆相机模型和相移加格雷码方法生成的点云就能够被添加到CC中了。
-
我们就可以使用CC实现点云的去噪点和拼接等功能。
-
分享结束,更多功能可以自由探索。