C++ 在PCL中可视化点法线点云的法线

C++ 在PCL中可视化点法线点云的法线,c++,exception,new-operator,point-cloud-library,C++,Exception,New Operator,Point Cloud Library,我试图可视化包含在pcl::PointNormal点云中的法线。我尝试使用以下代码执行此操作: std::shared_ptr<pcl::visualization::PCLVisualizer> viewer; std::mutex viewerMutex; void viewerThreadFunction() { while(true) { if(viewer->wasStopped()) break; viewerMutex.l

我试图可视化包含在
pcl::PointNormal
点云中的法线。我尝试使用以下代码执行此操作:

std::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
std::mutex viewerMutex;

void viewerThreadFunction() {
    while(true) {
        if(viewer->wasStopped()) break;
        viewerMutex.lock();
        viewer->spinOnce();
        viewerMutex.unlock();
    }
}

int main() {
    viewer = std::shared_ptr<pcl::visualization::PCLVisualizer>(
                    new pcl::visualization::PCLVisualizer("Viewer"));
    viewer->setBackgroundColor(0, 0, 0);

    pcl::PointCloud<pcl::PointNormal>::Ptr cloud(new pcl::PointCloud<pcl::PointNormal>);

    viewer->addPointCloudNormals<pcl::PointNormal, pcl::PointNormal> (cloud, cloud, 25, 0.15, "normals"); // It throws an exception here:

    std::thread viewerThread{viewerThreadFunction};

    while(true) {
        // populate the point cloud
        viewerMutex.lock();
        viewer->removePointCloud("normals");
        viewer->addPointCloudNormals<pcl::PointNormal, pcl::PointNormal> (cloud, cloud, 25, 0.15, "normals");
        viewerMutex.unlock();
    }
}

我试图重写程序,以便只在填充的点云上调用
viewer->addPointCloudNormals
,但没有任何帮助

您的查看器可能缺少实际的点云数据

尝试添加

viewer->addPointCloud<pcl::PointNormal>(cloud, "foo", 1);
viewer->addPointCloud(云,“foo”,1);

调用addpointcloudnormals之前,您的查看器可能缺少实际的点云数据

尝试添加

viewer->addPointCloud<pcl::PointNormal>(cloud, "foo", 1);
viewer->addPointCloud(云,“foo”,1);

在调用addpointcloudnormals之前,您将向查看器传递一个空云。如果我添加了一个包含数据的云,您的代码对我来说是有效的(可视化效果很差,但它正在工作)。查看器缺少要点。云对象存在,因此它不是空指针,但不包含任何点。我必须添加一个if语句来检查它。为什么可视化不好?我后来意识到它不好只是因为我的数据是以毫米为单位的,所以它画的线很小并且闪烁。将线条长度从0.15更改为更大,看起来很好。因此,代码没有问题。啊,您正在向查看器传递一个空云。如果我添加了一个包含数据的云,您的代码对我来说是有效的(可视化效果很差,但它正在工作)。查看器缺少要点。云对象存在,因此它不是空指针,但不包含任何点。我必须添加一个if语句来检查它。为什么可视化不好?我后来意识到它不好只是因为我的数据是以毫米为单位的,所以它画的线很小并且闪烁。将线条长度从0.15更改为更大,看起来很好。所以代码没有问题。