Data structures PCL库,如何访问有组织的点云?

Data structures PCL库,如何访问有组织的点云?,data-structures,point-cloud-library,Data Structures,Point Cloud Library,我有一个非常简单的问题: 我有一个点云存储在pcl::PointCloud数据结构中 如果我没有弄错的话,有组织的点云应该存储在一个矩阵状的结构中 所以,我的问题是:有没有一种方法可以通过行和列索引访问这个结构?而不是以通常的方式访问它,即作为线性阵列 举个例子: //data structure pcl::PointCloud<pcl::PointXYZ> cloud; //linearized access cloud[j + cols*i] = .... //matrix-

我有一个非常简单的问题:

我有一个点云存储在
pcl::PointCloud
数据结构中

如果我没有弄错的话,有组织的点云应该存储在一个矩阵状的结构中

所以,我的问题是:有没有一种方法可以通过行和列索引访问这个结构?而不是以通常的方式访问它,即作为线性阵列

举个例子:

//data structure
pcl::PointCloud<pcl::PointXYZ> cloud;

//linearized access
cloud[j + cols*i] = ....

//matrix-like access
cloud.at(i,j) = ...
//数据结构
点云;
//线性化存取
云[j+cols*i]=。。。。
//矩阵式存取
云.at(i,j)=。。。

谢谢。

要访问积分,请执行以下操作:

// create the cloud as a pointer
pcl::PointCloud<pcl::PointXYZ> cloud(new pcl::PointCloud<pcl::PointXYZ>);
//将云创建为指针
pcl::点云(新pcl::点云);
i
作为您要访问的元素编号

云->点[i].x
将为您提供x坐标


类似地,
cloud->points[i].y
cloud->points[i].z
将为您提供y和z坐标。

您可以使用
()操作符来访问这些点

    //creating the cloud
    PointCloud<PointXYZ> organizedCloud;
    organizedCloud.width = 2;
    organizedCloud.height = 3;
    organizedCloud.is_dense = false;
    organizedCloud.points.resize(organizedCloud.height*organizedCloud.width);

    //setting random values
for(std::size_t i=0; i<organizedCloud.height; i++){
        for(std::size_t j=0; j<organizedCloud.width; j++){
            organizedCloud.at(i,j).x = 1024*rand() / (RAND_MAX + 1.0f);
            organizedCloud.at(i,j).y = 1024*rand() / (RAND_MAX + 1.0f);
            organizedCloud.at(i,j).z = 1024*rand() / (RAND_MAX + 1.0f);
        }
    }

    //display
    std::cout << "Organized Cloud" <<std:: endl; 

    for(std::size_t i=0; i<organizedCloud.height; i++){
        for(std::size_t j=0; j<organizedCloud.width; j++){
           std::cout << organizedCloud.at(i,j).x << organizedCloud.at(i,j).y  <<  organizedCloud.at(i,j).z << " - "; }
          std::cout << std::endl;
      }
//创建云
点云组织云;
organizedCloud.width=2;
organizedCloud.height=3;
organizedCloud.is_density=false;
organizedCloud.points.resize(organizedCloud.height*organizedCloud.width);
//设置随机值

for(std::size\t i=0;i
cloud.at(column,row)
应该对您有效。您是否遇到任何问题?您确定您的云是有组织的(
cloud.isoorganized()
)?这并不特定于有组织的点云。问题是关于有组织的云及其类似矩阵的结构。谢谢你的回答,这正是我想要的。但是函数签名是
const PointT&at(int column,int row)const
,因此我认为应该切换I和j,即它应该是
organizedCloud.at(j,i)
在您的示例中。至少在我的测试中它是这样工作的。。。