c++ - PCL更改开始摄像头位置

标签 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和pcl 1.8。我也可以在pcl-users.org上找到每个示例和现有的帖子。
我已经尝试过OpenCV,但据我所知,它的质量对于无组织的点云并不理想。
我面临的情况是:
一种。如果我通过调用这些功能中的任何一个(或全部)来修改最细微的相机参数,画质就会下降,并且看起来像是没有聚焦:

  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。即使在与鼠标交互并修改了 View 之后,相机参数仍保持不变(实际上是在PCL: Visualize 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;
    }

最佳答案

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

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

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

关于c++ - PCL更改开始摄像头位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347606/

相关文章:

c++ - 在内存中复制字节时,字节顺序是否有影响?

c++ - 为不同版本的函数模板识别不同的默认参数

iphone - 我应该在我的 C++ iPhone 项目中开始使用 Clang/LLVM 吗?

c++ - 边界框方向

c++ - Kinfu LargeScale App PCL 不释放 GPU 内存

c++ - C++ 中的点云库 (PCL) 等待/延迟/ sleep 函数

c++ - 如何将 void* 类型转换为点云指针

c++ - 从文件中读取数字到两位有效数字?

c++ - LNK1104 : cannot open file 'libboost_program_options-vc100-mt-sgd-1_56.lib'

c++ - 如何使用 visual studio 2017 安装程序正确设置 PCL 库?