pcl::PointCloud<PointType>::Ptr cloudCamera(new pcl::PointCloud<PointType>);
float point_x= cloudCamera->points[point_index].x;
上述代码运行的时候报一下错误
typename boost::detail::sp_member_access<T>::type boost::shared_ptr<T>::operator->() const
[with T = pcl::PointCloud<pcl::PointXYZI>;
typename boost::detail::sp_member_access<T>::type = pcl::PointCloud<pcl::PointXYZI>*]: Assertion `px != 0' failed.
通过Debug调试软件定位,发现是point_index超出点云最大的索引了
后来发现问题所在:
自己定义了一个二维数组,初始化值为0,大小是图片mask的大小,里面的值代表点云的索引,即point_index
uint32_t projectionMat[mask.rows][mask.cols] = {{0}};
uint32_t point_index = projectionMat[v][u];
但是取值的时候忘了,其索引上界是mask.rows -1和mask.cols-1。程序里面索引到mask.rows和mask.cols时就越界了,导致值溢出。