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

  1. /*
  2. * @Description: add: 两个窗口显示点云(滤波前&滤波后) https://blog.csdn.net/weixin_45377028/article/details/104564467
  3. * @Author: HCQ
  4. * @Company(School): UCAS
  5. * @Date: 2020-10-14 11:11:11
  6. * @LastEditors: HCQ
  7. * @LastEditTime: 2020-10-14 11:30:58
  8. */
  9. #include <iostream>
  10. #include <pcl/io/pcd_io.h>
  11. #include <pcl/point_types.h>
  12. #include <pcl/filters/statistical_outlier_removal.h>
  13. #include <pcl/visualization/pcl_visualizer.h>
  14. #include <pcl/filters/passthrough.h>
  15. int main(int argc, char **argv)
  16. {
  17. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
  18. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
  19. // 填入点云数据
  20. pcl::PCDReader reader;
  21. // 把路径改为自己存放文件的路径
  22. reader.read<pcl::PointXYZ>("../table_scene_mug_stereo_textured.pcd", *cloud);
  23. std::cerr << "Cloud before filtering: " << std::endl;
  24. std::cerr << *cloud << std::endl;
  25. pcl::visualization::PCLVisualizer viewer("双窗口学习");
  26. //添加坐标系
  27. //viewer.addCoordinateSystem(0,0);
  28. int v1(0); //设置左右窗口
  29. int v2(1);
  30. viewer.createViewPort(0.0, 0.0, 0.5, 1, v1);
  31. viewer.setBackgroundColor(0, 0, 0, v1);
  32. viewer.createViewPort(0.5, 0.0, 1, 1, v2);
  33. viewer.setBackgroundColor(0.5, 0.5, 0.5, v2);
  34. pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_blue(cloud, 0, 0, 255); // 显示蓝色点云
  35. viewer.addPointCloud(cloud, cloud_out_blue, "cloud_out1", v1);
  36. pcl::PassThrough<pcl::PointXYZ> pass; //创建滤波器 pass
  37. pass.setInputCloud(cloud);
  38. pass.setFilterFieldName("z");
  39. pass.setFilterLimits(0, 1.5);
  40. //pass.setFilterLimitsNegative (true);
  41. pass.filter(*cloud_filtered);
  42. std::cerr << "Cloud after filtering: " << std::endl;
  43. std::cerr << *cloud_filtered << std::endl;
  44. /*pcl::PCDWriter writer;*/
  45. //writer.write<pcl::PointXYZ> ("table_scene_lms400_inliers.pcd", *cloud_filtered, false);
  46. //sor.setNegative (true);
  47. //sor.filter (*cloud_filtered);
  48. //writer.write<pcl::PointXYZ> ("table_scene_lms400_outliers.pcd", *cloud_filtered, false);
  49. pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_out_orage(cloud_filtered, 250, 128, 10); //显示橘色点云
  50. viewer.addPointCloud(cloud_filtered, cloud_out_orage, "cloud_out2", v2);
  51. //viewer.setSize(960, 780);
  52. while (!viewer.wasStopped())
  53. {
  54. viewer.spinOnce();
  55. }
  56. return 0;
  57. }

显示四个点云

其中viewer->createViewPort (0.0, 0.0, 0.5, 1.0, v1);
createViewPort是用于创建新视口的函数,所需的4个参数分别是视口在(Xmin,Ymin,Xmax,Ymax)设置窗口坐标,取值在0-1.
V1视口位于窗口左半部分,V2视口位于右半部分。
创建一个田字由四个窗口显示点云的方法是先创建四个viewport的id
根据xy坐标原点在左上角

注意箭头和点的区别

  1. int v1,v2,v3,v4;
  2. viewer->createViewPort (0.0, 0.0, 0.5, 0.5, v1); //(Xmin,Ymin,Xmax,Ymax)设置窗口坐标
  3. viewer->createViewPort (0.5, 0.0, 1.0, 0.5, v2);
  4. viewer->createViewPort (0.0, 0.5, 0.5, 1.0, v3);
  5. 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();
    }