我想将点云作为输入参数传递给点云库提出的函数,但这是我的问题: 我有一个点云矢量,我想逐个将它们传递给过滤器,最终将它们放入另一个点云过滤矢量中。我正在使用迭代器,但是期望点云作为输入的函数不会使用迭代器...我不明白为什么。代码:
std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> pcl_filter(std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> rdy_to_pro_pcls){
std::vector<int> indices;
std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr>::iterator vIt_pcls = rdy_to_pro_pcls.begin();
std::vector <pcl::PointCloud<pcl::PointXYZRGB>::Ptr> vFilt_pcls;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr without_nanpcl(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr filt_pcl(new pcl::PointCloud<pcl::PointXYZRGB>);
for (vIt_pcls = rdy_to_pro_pcls.begin(); vIt_pcls != rdy_to_pro_pcls.end(); vIt_pcls++){
pcl::removeNaNFromPointCloud(*vIt_pcls, *without_nanpcl, indices);
pcl::VoxelGrid<pcl::PointXYZRGB> sor;
sor.setInputCloud(*vIt_pcls);
sor.setLeafSize(0.01f, 0.01f, 0.01f);
sor.filter(*filt_pcl);
vFilt_pcls.push_back(filt_pcl);
}
return vFilt_pcls;
}
我实际上想将without_nanpcl对象放入向量中。因为我的调试器不能批准我正在做的事情,所以我无法继续前进。正如你在下面看到的那样,有一个名为setInputCloud的函数接受了向量迭代器,我想用pcl :: removeNaNFromPointCloud做同样的事情,但是我无法弄清楚它为什么不起作用。
这是错误输出(代码示例的第8行):
error C2784: 'void pcl::removeNaNFromPointCloud(const pcl::PointCloud<PointT> &,pcl::PointCloud<PointT> &,std::vector<int,std::allocator<_Ty>> &)' : could not deduce template argument for 'const pcl::PointCloud<PointT> &' from 'boost::shared_ptr<pcl::PointCloud<pcl::PointXYZRGB>>'
这是pcl :: removeNaNFromPointCloud声明:
void pcl::removeNaNFromPointCloud (
const pcl::PointCloud< PointT > & cloud_in,
pcl::PointCloud< PointT > & cloud_out,
std::vector< int > & index
)
你能帮我解决这个问题吗?
谢谢
答案 0 :(得分:1)
从功能签名中,您可以看到它需要引用pcl::PointCloud< PointT >
(我假设它实际上是一个功能模板而PointT
是它的模板参数),但是你&#39 ;重新传入pcl::PointCloud<pcl::PointXYZRGB>::Ptr
,通过解引用迭代器获得。您还需要取消引用指针以获取点云对象:
pcl::removeNaNFromPointCloud(**vIt_pcls, *without_nanpcl, indices);