CloudCompare算法库(CCCorelib)编译与调用总结
前景介绍
本人编写此总结的目的,一是为了学习总结,二是希望帮助到其他有这个需求的同学们。
最开始想使用这个算法库是因为项目上有这个点云配准需求,通过调研也了解到比PCL中的配准效果要好。从算法实现上,虽然CC也是使用了ICP算法,但是在ICP基础上进行了改进,让其更具有通用性,,改进的ICP算法采用了一些特殊的策略或优化来适应一些特定的应用场景。而PCL库提供了多种点云配准算法的实现,包括ICP(Iterative Closest Point)、NDT(Normal Distributions Transform)等,这些算法在实现和性能上可能与CloudCompare的算法有所不同,因为CloudCompare对ICP算法进行了一些默认参数的调优,以适应一般情况下的配准需求。
偶然的机会注意到CoudCompare的作者已经将CloudCompare的算法库与其可视化&部分进行了分离,这个算法库已经可以单独拿出来进行使用了。该算法库包括CloudCompare大部分的算法过程,如ICP距离计算、点云分割等等。
编译环境:VS2017 + QT5.14.2 + CMake3.15.5
编译总结
1.算法库下载
下载链接:CCCoreLib官方下载链接
2.使用CMake生成VS项目
默认勾选上面的2个选项,第1个为是否生成动态库,第2个为是否使用Qt的并行库,(没有qt这个选项可以不用选)。
注意:①别忘了修改安装路径。②记得选择自己的VS版本,我的是VS2017 X64
3.算法库CCCoreLib编译与安装
调用总结
安装好这个算法库之后,创建一个vs项目,配置一下头文件与库文件路径:
添加下面代码进行测试
#include <CCCoreLib/PointCloudTpl.h>
#include <CCCoreLib/GenericIndexedCloudPersist.h>
#include <CCCoreLib/CCGeom.h>
#include <string>
#include <iostream>
using PointCloud = CCCoreLib::GenericIndexedCloudPersist;
void CCCICPToolDlg::OnBnClickedButton1(){
CCCoreLib::PointCloudTpl<PointCloud> ccCloud;
ccCloud.addPoint(CCVector3(1, 1, 1));
ccCloud.addPoint(CCVector3(1, 1, 1));
ccCloud.addPoint(CCVector3(1, 1, 1));
ccCloud.addPoint(CCVector3(1, 1, 1));
strText.Format("点云中的点数量:%d", ccCloud2.size());
MessageBox(strText);
return;
}
问题汇总
1.编译错误
在编译过程中会出现编译错误,这个时候需要增加添加
CC_CORE_LIB_USES_FLOAT 这个宏。(VS2019版本好像没有这个问题)
参考&引用
①https://blog.csdn.net/dayuhaitang1/article/details/128307205
②https://blog.csdn.net/qq_41965957/article/details/125229654
③https://blog.csdn.net/ahhxxttxs/article/details/122785170