描述
使用PCL库,读取.ply格式点云数据并进行显示
代码
#include <iostream>
//点云需要的头文件
#include <pcl/point_types.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
void drawPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, std::string titleName)
{
pcl::visualization::PCLVisualizer viewer (titleName);
int v (0);
viewer.createViewPort (0.0, 0.0, 1.0, 1.0, v);
viewer.addCoordinateSystem(0.5);
float bckgr_gray_level = 0.0; // Black
float txt_gray_lvl = 1.0 - bckgr_gray_level;
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_in_color_h (cloud, (int) 255 * txt_gray_lvl, (int) 255 * txt_gray_lvl, (int) 255 * txt_gray_lvl);
viewer.addPointCloud (cloud, cloud_in_color_h, "cloud_in_v1", v);
viewer.addText (titleName, 10, 15, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "icp_info_1", v);
viewer.setBackgroundColor (bckgr_gray_level, bckgr_gray_level, bckgr_gray_level, v);
viewer.setCameraPosition (-3.68332, 2.94092, 5.71266, 0.289847, 0.921947, -0.256907, 0);
viewer.setSize (1280, 1024);
while (!viewer.wasStopped())
{
viewer.spinOnce();
}
}
pcl::PointCloud<pcl::PointXYZ>::Ptr loadPointCloud(std::string path)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPLYFile<pcl::PointXYZ>(path, *cloud) == -1)
{
PCL_ERROR("Couldnot read file.\n");
return 0;
}
std::cout<<"pointcloud size: "<<cloud->width<<" * "<<cloud->height << std::endl;
return cloud;
}
int main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
cloud = loadPointCloud("../standard.ply");
drawPointCloud(cloud, "show");
return 1;
}