想调用pcl高斯滤波函数进行点云处理中,先参考了两种网上的pcl高斯滤波程序,在VS2013中运行报错,一直未能解决,求助!!!
方法1:(参考文章:https://blog.csdn.net/fandq1223/article/details/53183489)
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/convolution_3d.h>
#include <pcl/filters/convolution.h>
#include <pcl/search/kdtree.h>
int main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr inputCloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile("test.pcd", *inputCloud) == -1)
{
PCL_ERROR("Couldn't read file test_pcd.pcd\n");
return(-1);
}
pcl::filters::Convolution<pcl::PointXYZ, pcl::PointXYZ> convolution;
Eigen::ArrayXf gaussian_kernel(5);
gaussian_kernel << 1.f / 16, 1.f / 4, 3.f / 8, 1.f / 4, 1.f / 16;
convolution.setBordersPolicy(
pcl::filters::Convolution<pcl::PointXYZ, pcl::PointXYZ>::BORDERS_POLICY_IGNORE);
convolution.setDistanceThreshold(static_cast<float> (0.1));
convolution.setInputCloud(inputCloud);
convolution.setKernel(gaussian_kernel);
convolution.convolve(*cloud);
}
运行到最后一句convolution.convolve(*cloud);时报错:,尝试修改程序,任然报错
方法2:(参考文章:https://blog.csdn.net/fandq1223/article/details/53183489)
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/convolution_3d.h>
#include <pcl/filters/convolution.h>
#include <pcl/search/kdtree.h>
int main(int argc, char** argv)
{
//Create the input and filtered cloud objects
pcl::PointCloud<pcl::PointXYZ>::Ptr inputcloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr outputcloud(new pcl::PointCloud<pcl::PointXYZ>);
//Read in the input file
if (pcl::io::loadPCDFile("test.pcd", *inputcloud) == -1)
{
PCL_ERROR("Couldn't read file test_pcd.pcd\n");
return(-1);
}
//Set up the Gaussian Kernel
pcl::filters::GaussianKernel<pcl::PointXYZ, pcl::PointXYZ>::Ptr kernel(new pcl::filters::GaussianKernel<pcl::PointXYZ, pcl::PointXYZ>);
(*kernel).setSigma(4);
(*kernel).setThresholdRelativeToSigma(4);
std::cout << "Kernel made" << std::endl;
//Set up the KDTree
pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);
(*kdtree).setInputCloud(inputcloud);
std::cout << "KdTree made" << std::endl;
//Set up the Convolution Filter
pcl::filters::Convolution3D<pcl::PointXYZ, pcl::PointXYZ, pcl::filters::GaussianKernel<pcl::PointXYZ, pcl::PointXYZ>> convolution;
convolution.setKernel(*kernel);
convolution.setInputCloud(inputcloud);
convolution.setSearchMethod(kdtree);
convolution.setRadiusSearch(100);
std::cout << "Convolution Start" << std::endl;
convolution.convolve(*outputcloud);
std::cout << "Convoluted" << std::endl;
}
在生成解决方案时对数第二句convolution.convolve(*outputcloud);报错:error C3066:使用这些参数调用此类型的对象有多种方法,查找资料也未能解决。