提取y值小于索引号为61的点 pclPointCloudpclPointXYZPtr filtered_cloudnew pclPointCloudpclPointXYZ; for int i = 0; i 61; i++ if cloud-pointsiy cloud-points61y filtered_cloud-push_backcloud-pointsi; 进行最小
请尝试以下代码:
// 提取y值小于索引号为61的点
pcl::PointCloud<pcl::PointXYZ>::Ptr filtered_cloud(new pcl::PointCloud<pcl::PointXYZ>);
for (int i = 0; i < 61; i++) {
if (cloud->points[i].y < cloud->points[61].y) {
filtered_cloud->push_back(cloud->points[i]);
}
}
// 进行最小二乘法拟合直线
Eigen::VectorXf coefficients;
pcl::computePointNormal(*filtered_cloud, coefficients);
pcl::ModelCoefficients::Ptr line_coefficients(new pcl::ModelCoefficients);
line_coefficients->values.resize(6);
line_coefficients->values[0] = coefficients[3]; // x方向向量
line_coefficients->values[1] = coefficients[4]; // y方向向量
line_coefficients->values[2] = coefficients[5]; // z方向向量
line_coefficients->values[3] = 0.0; // 直线上一点的x坐标
line_coefficients->values[4] = cloud->points[61].y; // 直线上一点的y坐标
line_coefficients->values[5] = 0.0; // 直线上一点的z坐标
// 将拟合出的直线保存为PLY文件
pcl::PointCloud<pcl::PointXYZ>::Ptr line_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointXYZ point1(0.0, line_coefficients->values[4], 0.0);
pcl::PointXYZ point2(1.0, line_coefficients->values[4], 0.0);
line_cloud->push_back(point1);
line_cloud->push_back(point2);
line_cloud->width = 2;
line_cloud->height = 1;
line_cloud->is_dense = true;
pcl::io::savePLYFile("D:\\DIANYUNWENJIANJIA\\最小二乘法拟合直线_ply.ply", *line_cloud, true);
请确保在项目中包含了正确的头文件和库文件,并将文件路径修改为实际的路径
原文地址: https://www.cveoy.top/t/topic/ihpN 著作权归作者所有。请勿转载和采集!