PCL更改开始摄像头位置

时间:2019-03-25 23:02:38

标签: c++ point-cloud-library

我正在尝试使用PCL库(这是我的新手),以从.las文件中获得的无组织点云中获取图像,然后将其转换为pcd文件以供PCL库使用。为了可视化点云,我使用了以下示例代码:https://github.com/UnaNancyOwen/Tutorials/blob/master/tutorials/range_image_border_extraction/range_image_border_extraction.cpp

可以从以下位置检索点云:https://senseflycom.s3.amazonaws.com/datasets/concrete-bridge/concrete-bridge-column_densified_point_cloud.las

对于.las到.pcd,我使用了https://github.com/murtiad/las2pcd

默认情况下,相机位置不正确(我将需要使用鼠标与可视化工具进行交互才能达到正确的位置),但是质量是正确的,并且能够使用saveScreenshot方法转储照片。

我将不胜感激,我正在运行ubuntu 18.04和pcl1.8。我还可以在pcl-users.org上找到每个示例和现有的帖子。 我已经尝试过opencv,但据我所知,它的质量对于无组织的点云并不理想。

我面临的情况是:

a。如果我通过调用这些功能中的任何一个(或全部)来修改最细微的相机参数,则画质会下降,并且看起来像没有聚焦:

  pcl::visualization::PCLVisualizer viewer ("3D Viewer");
  viewer.setBackgroundColor (1, 1, 1);
  viewer.addCoordinateSystem (1.0f, "reference");
  /* Evil functions */
  viewer.initCameraParameters();
  viewer.setCameraPosition(0, -30, 0,    0, 0, 0,   0, 0, 1);
  viewer.setCameraFieldOfView(0.523599);
  viewer.setCameraClipDistances(0.00522511, 50);

b。如果我不修改任何参数,则质量仍然存在,但我需要与鼠标进行交互,这是我要避免的

c。即使在与鼠标交互并修改了视图之后,相机参数仍保持不变(实际上在循环PCL: Visualise a point cloud上使用了该帖子):

  viewer.getCameras (cam);
  //--------------------
  // -----Main loop-----
  //--------------------
  while (!viewer.wasStopped ())
  {
//    range_image_borders_widget->spinOnce ();
    viewer.spinOnce ();
    pcl_sleep(0.5);
    cout << "Cam: " << endl
                 << " - pos: (" << cam[0].pos[0] << ", "    << cam[0].pos[1] << ", "    << cam[0].pos[2] << ")" << endl
                 << " - view: ("    << cam[0].view[0] << ", "   << cam[0].view[1] << ", "   << cam[0].view[2] << ")"    << endl
                 << " - focal: ("   << cam[0].focal[0] << ", "  << cam[0].focal[1] << ", "  << cam[0].focal[2] << ")"   << endl
                 << " - fovy: ("    << cam[0].fovy   << " - clip: ("    << cam[0].clip[0]   << " , "    << cam[0].clip[1] << ")"    << endl;

  }

1 个答案:

答案 0 :(得分:0)

问题在于将摄像机定位为180º,并使其点云有序,导致高度= 1,并且实际上在两个角度上的颜色和形状都相同。

有效地将下面的“邪恶代码”修改为“已解决问题”:

 viewer.initCameraParameters();
 viewer.setCameraPosition(0, 30, 0,    0, 0, 0,   0, 0, 1);
 viewer.setCameraFieldOfView(0.523599);
 viewer.setCameraClipDistances(0.00522511, 50);