尝试从Point Cloud Library中的3D查看器捕获一些图像 . 我的问题是,我将打开观察器,操作相机到正确的位置,然后记录相机位置和视角,然后在我的代码中我将相机位置设置为记录值 . 但是,我下次运行程序时获得的视图与我记录摄像机位置时的视图不匹配 . 这是PCL中我缺少的东西还是我代码中的东西?

我遇到的另一个问题是3D查看器实际上并没有显示任何内容,除非我使用鼠标与它进行交互(在窗口中拖动它或放大/缩小) . 我想自动化这个过程,所以这有点不方便 . 相关代码:

boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{

    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
    viewer->setBackgroundColor (0, 0, 0);
    viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");
    viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
    viewer->addCoordinateSystem (1.0);
    viewer->initCameraParameters ();
    return (viewer);
}

int main() {
    outputCloud->width = (int) outputCloud->points.size();
    outputCloud->height = 1;
    boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer =                     
    simpleVis(outputCloud);
    std::string outName = generateOutputName("cross");
    viewer->setCameraPosition(3283.64, 4997.91, 2367.14, 0, -.3, 1);
    while (!viewer->wasStopped ())
    {
        viewer->spinOnce (100);
        boost::this_thread::sleep (boost::posix_time::microseconds (100000));
    }
    viewer->saveScreenshot(outName);
}

这段代码几乎直接来自PCL教程,除了我添加的setCameraPosition行,所以我不完全确定会出现什么问题 .