C#和C++混合编程,使用CLR托管,在C++代码中使用了PCL点云库来处理点云数据,程序运行到利用PCL进行平面分割时报错。
整个程序读入的是点云,出错部分代码如下:
//平面分割,寻找芯片大平面
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_plane(new pcl::PointCloud<pcl::PointXYZ>);
{
//创建分割时所需要的模型系数对象coefficients以及存储内点的点索引集合对象
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
//创建分割对象
pcl::SACSegmentation<pcl::PointXYZ> m_seg;
//可选参数,设置模型参数需要优化
m_seg.setOptimizeCoefficients(true);
//设置分割模型类型、所用的随机参数估计方法、距离阈值、输入点云
m_seg.setModelType(pcl::SACMODEL_PLANE);
m_seg.setMethodType(pcl::SAC_RANSAC);
m_seg.setDistanceThreshold(0.1);
m_seg.setInputCloud(pt_chip_transformed);
m_seg.segment(*inliers, *coefficients);
if (inliers->indices.size() == 0)
{
PCL_ERROR("Could not estimate a planar model for the given dataset.");
}
//输出平面模型系数
//std::cerr << "Model coefficients:" << coefficients->values[0] << " " << coefficients->values[1] << " " << coefficients->values[2] << " " << coefficients->values[3] << std::endl;
//pcl::PointCloud<pcl::PointXYZ>::Ptr pt_chip_dsample(new pcl::PointCloud<pcl::PointXYZ>);
cloud_plane->width = inliers->indices.size();
cloud_plane->height = 1;
cloud_plane->is_dense = false;
cloud_plane->resize(cloud_plane->height * cloud_plane->width);
for (int i = 0; i < inliers->indices.size(); i++)
{
cloud_plane->points[i].x = pt_chip_transformed->points[inliers->indices[i]].x;
cloud_plane->points[i].y = pt_chip_transformed->points[inliers->indices[i]].y;
cloud_plane->points[i].z = pt_chip_transformed->points[inliers->indices[i]].z;
}
}
执行
m_seg.segment(*inliers, *coefficients);
时出错,错误如下:
System.Runtime.InteropServices.SEHException
HResult=0x80004005
Message=外部组件发生异常。
Source=<无法计算异常源>
StackTrace:
<无法计算异常堆栈跟踪>
已经被困扰好几天,不知道是什么原因,请各位帮忙看一下。非常感谢。