https://blog.csdn.net/uranus1992/article/details/84545820
PCL 显示两个点云
https://blog.csdn.net/weixin_45377028/article/details/104564467
其中v1(v2)就是点云的viewport参数!(viewport应该就是点云的位置!)
**
15visualization可视化/4multi_pcl_visualizer/multi_pcl_visualizer.cpp
/** @Description: add: 两个窗口显示点云(滤波前&滤波后) https://blog.csdn.net/weixin_45377028/article/details/104564467* @Author: HCQ* @Company(School): UCAS* @Date: 2020-10-14 11:11:11* @LastEditors: HCQ* @LastEditTime: 2020-10-14 11:30:58*/#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>int main(int argc, char **argv){pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);// 填入点云数据pcl::PCDReader reader;// 把路径改为自己存放文件的路径reader.read<pcl::PointXYZ>("../table_scene_mug_stereo_textured.pcd", *cloud);std::cerr << "Cloud before filtering: " << std::endl;std::cerr << *cloud << std::endl;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::PassThrough<pcl::PointXYZ> pass; //创建滤波器 passpass.setInputCloud(cloud);pass.setFilterFieldName("z");pass.setFilterLimits(0, 1.5);//pass.setFilterLimitsNegative (true);pass.filter(*cloud_filtered);std::cerr << "Cloud after filtering: " << std::endl;std::cerr << *cloud_filtered << std::endl;/*pcl::PCDWriter writer;*///writer.write<pcl::PointXYZ> ("table_scene_lms400_inliers.pcd", *cloud_filtered, false);//sor.setNegative (true);//sor.filter (*cloud_filtered);//writer.write<pcl::PointXYZ> ("table_scene_lms400_outliers.pcd", *cloud_filtered, false);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;}
显示四个点云
其中viewer->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
createViewPort是用于创建新视口的函数,所需的4个参数分别是视口在(Xmin,Ymin,Xmax,Ymax)设置窗口坐标,取值在0-1.
V1视口位于窗口左半部分,V2视口位于右半部分。
创建一个田字由四个窗口显示点云的方法是先创建四个viewport的id
根据xy坐标原点在左上角:
注意箭头和点的区别
int v1,v2,v3,v4;viewer->createViewPort (0.0, 0.0, 0.5, 0.5, v1); //(Xmin,Ymin,Xmax,Ymax)设置窗口坐标viewer->createViewPort (0.5, 0.0, 1.0, 0.5, v2);viewer->createViewPort (0.0, 0.5, 0.5, 1.0, v3);viewer->createViewPort (0.5, 0.5, 1.0, 1.0, v4);
int v1(0); // 左上角
viewer->createViewPort(0.0, 0.5, 0.5, 1.0, v1);
int v2(0); // 右上角
viewer->createViewPort(0.5, 0.5, 1.0, 1.0, v2);
int v3(0); // 左下角
viewer->createViewPort(0.0, 0.0, 0.5, 0.5, v3);
int v4(0); // 右下角
viewer->createViewPort(0.5, 0.0, 1.0, 0.5, v4);
https://blog.csdn.net/weixin_43661854/article/details/90765962?
个人总结
// 可视化
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("three 三窗口 "));
int v1(0); //设置左右窗口
int v2(1);
int v3(2);
viewer->createViewPort(0.0, 0.0, 0.5,1.0, v1); //(Xmin,Ymin,Xmax,Ymax)设置窗口坐标
viewer->createViewPort(0.5, 0.0, 1.0, 0.5, v2);
viewer->createViewPort(0.5, 0.5, 1.0, 1.0, v3);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_red(cloud, 255, 0, 0); // 显示红色点云
viewer->addPointCloud(cloud, cloud_out_red, "cloud_out1", v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_green(cloud, 0, 255, 0); // 显示绿色点云
viewer->addPointCloud(cloud_plane, cloud_out_green, "cloud_out2", v2); // 平面
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_blue(cloud, 0, 0, 255); // 显示蓝色点云
viewer->addPointCloud(cloud_cylinder, cloud_out_blue, "cloud_out3", v3); // 圆柱
while (!viewer->wasStopped())
{
viewer->spinOnce();
}
