修改代码使得切片方向设为点云的主方向pclPointXYZRGB minPt maxPt; pclgetMinMax3Dm_cloud minPt maxPt; pclconsoleTicToc time; timetic; stdvectorintidx; 循环切片次数少于点的个数 切叶片 for int i = 0; i m_cloud-size; ++i double maxY = -
pcl::PointXYZRGB minPt, maxPt; pcl::getMinMax3D(*m_cloud, minPt, maxPt); pcl::PointCloudpcl::PointXYZRGB::Ptr cloud_rotated(new pcl::PointCloudpcl::PointXYZRGB); pcl::copyPointCloud(*m_cloud, *cloud_rotated);
// 计算点云的主方向 Eigen::Vector4f centroid; pcl::compute3DCentroid(*m_cloud, centroid); Eigen::Matrix3f covariance; pcl::computeCovarianceMatrixNormalized(*m_cloud, centroid, covariance); Eigen::SelfAdjointEigenSolverEigen::Matrix3f eigen_solver(covariance, Eigen::ComputeEigenvectors); Eigen::Matrix3f eigen_vectors = eigen_solver.eigenvectors(); eigen_vectors.col(2) = eigen_vectors.col(0).cross(eigen_vectors.col(1));
// 将点云旋转到主方向 Eigen::Matrix4f rotation_matrix = Eigen::Matrix4f::Identity(); rotation_matrix.block<3, 3>(0, 0) = eigen_vectors.transpose(); pcl::transformPointCloud(*m_cloud, *cloud_rotated, rotation_matrix);
pcl::console::TicToc time;
time.tic();
std::vector
原文地址: http://www.cveoy.top/t/topic/iYAo 著作权归作者所有。请勿转载和采集!