目录
1、前提
环境:VS2015+PCL1.8.0+Win10,PCL环境正确配置,步骤可以参考博客;https://blog.youkuaiyun.com/weixin_36602742/article/details/112345693
2、PCD文件读取
1)新建win32控制台程序
2)头文件
#include "stdafx.h"
#include <iostream> //标准C++库中输入输出类相关头文件
#include <pcl/io/pcd_io.h>//PCD 读写类相关的头文件
#include <pcl/point_types.h> //PCD中支持的点类型头文件
3)与本程序相关的头文件声明
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
4)创建一个PointCloud<PointXYZ>boost共享指针并进行实例化
if (pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd", *cloud) == -1)//*打开点云文件
{
PCL_ERROR("Couldn't read file test_pcd.pcd\n");
return(-1);
}
5)测试用的PCD文件,下载链接:链接:https://pan.baidu.com/s/1VHk7KdHGk0J3QUnWnAON2Q
提取码:dyzd
如链接失效,可以在下方评论留言获取
6)把二进制读取并转换到模板化的PointCloud格式里,这里用pcl::PointXYZ作为点类型
for (size_t i = 0;i<cloud->points.size();++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
7)所有测试代码如下:
// test20210107.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream> //标准C++库中输入输出类相关头文件
#include <pcl/io/pcd_io.h>//PCD 读写类相关的头文件
#include <pcl/point_types.h> //PCD中支持的点类型头文件
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>
int main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd", *cloud) == -1)//*打开点云文件
{
PCL_ERROR("Couldn't read file test_pcd.pcd\n");
return(-1);
}
std::cout << "Loaded "
<< cloud->width*cloud->height
<< " data points from test_pcd.pcd with the following fields: "
<< std::endl;
for (size_t i = 0;i<cloud->points.size();++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
system("pause");
return(0);
}
8)测试结果如下:
3 可能遇到的问题
1)PCD文件必须放到源代码同一目录下
2)初次编译可能会出现无法找到OpenNI2.dll无法获取的问题,需要将C:\Program Files (x86)\PCL 1.8.0\3rdParty\OpenNI2\Tools目录下的OpenNI2.dll文件拷贝到源文件同一目录下