代码:
1、简单可视化 cloud_viewer
#include<iostream>
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/visualization/cloud_viewer.h>
int user_data;
using std::cout;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
viewer.setBackgroundColor(3.0, 0.5, 2.0); //设置背景颜色
}
int main() {
//创建点云对象
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
//点集路径
char strfilepath[256] = "C:\\Users\\Empower\\Desktop\\exep\\bunny.pcd";
//打开点集文件并将点集给到点云对象
if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
cout << "error input!" << endl;
return -1;
}
//输出点云大小
//cout << cloud->points.size() << endl;
//创建点云可视化对象
pcl::visualization::CloudViewer viewer("Cloud Viewer"); //创建viewer对象
//将点云显示到可视化窗体上
viewer.showCloud(cloud);
//设置背景颜色
viewer.runOnVisualizationThreadOnce(viewerOneOff);
//将窗体暂停
system("pause");
return 0;
}
2、高级可视化:
CloudViewer类本质上是 PCLVisualizer 类的简化封装,如果需要更多操作,则需要使用 PCLVisualizer 。
//创建点云对象
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
char strfilepath[256]= "C:\\Users\\Empower\\Desktop\\exep\\bunny.pcd";
//将点集路径内的点集数据给到点云对象
if(pcl::io::loadPCDFile(strfilepath,*cloud)==-1)
{
cout<<"输入错误" << endl;
return -1;
}
//输出点集的大小
cout << cloud->points.size() << endl;
//创建点云对象
pcl::visualization::PCLVisualizer newer("asa");
//参数初始化
newer.initCameraParameters();
//将点云数据添加到可视化对象
newer.addPointCloud(cloud,"cloud1");
//设置背景色
newer.setBackgroundColor(1, 0, 1);
//设置点的大小
newer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud1");
//阻塞式
newer.spin();
非阻塞式
//while (!newer.wasStopped())
//{
// newer.spinOnce(100);
// Sleep(1000);
//}
return 0;
运行效果:
3、同时显示两个点云图
代码:
#include <iostream> //标准输入/输出
#include <boost/thread/thread.hpp> //多线程
#include <pcl/common/common_headers.h>
#include <pcl/range_image/range_image.h> //深度图有关头文件
#include <pcl/io/pcd_io.h> //pcd文件输入/输出
#include <pcl/visualization/range_image_visualizer.h> //深度图可视化
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h> //命令行参数解析
#include <pcl/range_image/range_image.h>
using namespace std;
int main()
{
//定义点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr soure(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr soure1(new pcl::PointCloud<pcl::PointXYZ>);
//读取点云文本
string filepath= "C:\\Users\\Empower\\Desktop\\exep\\bunny.pcd";
string filepath1 = "C:\\Users\\Empower\\Desktop\\exep\\bunny1.pcd";
pcl::io::loadPCDFile(filepath, *soure);
pcl::io::loadPCDFile(filepath1, *soure1);
cout << "点云加载成功!" << endl;
//参数初始化
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3d visual"));
viewer->initCameraParameters();
//参数初始值
int v1=0;
//创建视口 X轴最小值 Y轴最小值 X轴最大值,Y轴最大值 占前半个窗体
viewer->createViewPort(0, 0, 1.0 / 2.0, 1.0, v1);
//设置背景色
viewer->setBackgroundColor(1, 0,0, v1);
//添加文字 X位置 Y位置 索引 视窗初始值
viewer->addText("w1", 0, 0, "v1 text", v1);
//创建可视化对象
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color(soure, 0, 0, 0);
//将点云数据添加到可视化对象
viewer->addPointCloud<pcl::PointXYZ>(soure, source_color, "sample cloud1", v1);
//创建视口 X轴最小值 Y轴最小值 X轴最大值,Y轴最大值 占后半个窗体
viewer->createViewPort(1.0 / 2.0, 0.0, 1.0, 1.0, v1);
//设置背景色
viewer->setBackgroundColor(0, 0, 1, v1);
//添加文字 X位置 Y位置 索引 视窗初始值
viewer->addText("w2", 10, 10, "v2 text", v1);
//创建可视化对象
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color2(soure1, 0, 0, 0);
//将点云数据添加到可视化对象
viewer->addPointCloud<pcl::PointXYZ>(soure1, source_color2, "sample cloud2", v1);
//设置点的大小
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 4, "sample cloud1");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud2");
viewer->addCoordinateSystem(1.0);
//阻塞式显示
viewer->spin();
return 0;
}
运行效果
pcd文件百度网盘地址:
https://pan.baidu.com/s/1pXCRPkSB4fJT1hnh7xUbZA
提取码:btww