0%

PCL库的相关要点记录

记录点云处理库PCL的相关要点,长期更新。

PCL的安装和环境配置

VS2019+PCL1.11.1,windows,c++:

https://zhuanlan.zhihu.com/p/142955614
(链接中为1.10.1,但这两个版本的步骤是一样的,不同点在于:包含目录中头文件路径和库目录中库文件路径会有所不同,需要仔细比对)

项目属性表的配置可以参考下面的链接:
https://blog.csdn.net/weixin_42059276/article/details/106149359
配置完成后可以使用如下代码检验是否成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma warning(disable:4996)
#include<iostream>
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>

/*
(用于粘贴用)
#pragma warning(disable:4996)
#include<iostream>
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
*/

int main(int argc, char** argv) {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

//
//*打开点云文件
if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) {
PCL_ERROR("Couldn't read file rabbit.pcd\n");
return(-1);
}
std::cout << cloud->points.size() << std::endl;
pcl::visualization::CloudViewer viewer("cloud viewer");
viewer.showCloud(cloud);
while (!viewer.wasStopped()) {

}
system("pause");
return 0;
}

成功后会显示出“兔子”形状的三维点云,如下图所示。

代码运行效果图

rabbit.pcd的下载地址:https://pan.baidu.com/s/1Gsnsb4AllcJxjdsYbGw-Cw

PCL的一些小程序

将ply文件转化为pcd文件

原网址:https://blog.csdn.net/peach_blossom/article/details/78354641

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <pcl/common/io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_lib_io.h>

using namespace std;

int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());
pcl::PolygonMesh mesh;
vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
pcl::io::loadPolygonFilePLY("/projects/pcddata/horse.ply", mesh);
pcl::io::mesh2vtk(mesh, polydata);
pcl::io::vtkPolyDataToPointCloud(polydata, *cloud);
pcl::io::savePCDFileASCII("/projects/pcddata/horse.pcd", *cloud);
return 0;
}

显示窗口同时显示多个点云

原网址:https://blog.csdn.net/weixin_45377028/article/details/104564467

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/filters/passthrough.h>


/************************
关键
****************************/
pcl::visualization::PCLVisualizer viewer("双窗口学习");
//添加坐标系
//viewer.addCoordinateSystem(0,0);

int v1(0); //设置左右窗口
int v2(1);

viewer.createViewPort(0.0, 0.0, 0.5, 1, v1);
viewer.setBackgroundColor(0, 0, 0, v1);

viewer.createViewPort(0.5, 0.0, 1, 1, v2);
viewer.setBackgroundColor(0.5, 0.5, 0.5, v2);

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_blue(cloud, 0, 0, 255); // 显示蓝色点云
viewer.addPointCloud(cloud, cloud_out_blue, "cloud_out1", v1);

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_orage(cloud_filtered, 250, 128, 10); //显示橘色点云
viewer.addPointCloud(cloud_filtered, cloud_out_orage, "cloud_out2", v2);
//viewer.setSize(960, 780);
while (!viewer.wasStopped())
{
viewer.spinOnce();
}
return 0;


}