#include #include <pcl/io/ply_io.h> #include <pcl/visualization/pcl_visualizer.h> #include <pcl/point_types.h> #include <pcl/ModelCoefficients.h> #include <pcl/sample_consensus/method_types.h> #include <pcl/sample_consensus/model_types.h> #include <pcl/segmentation/sac_segmentation.h>

int main(int argc, char** argv) { // 加载点云文件 pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ); if (pcl::io::loadPLYFilepcl::PointXYZ("input_cloud.ply", *cloud) == -1) { PCL_ERROR("Couldn't read file input_cloud.ply\n"); return -1; }

// 创建可视化对象
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer->setBackgroundColor(0, 0, 0);
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();

// 提取两个点作为直线拟合的输入
pcl::PointXYZ point1 = cloud->points[0];
pcl::PointXYZ point2 = cloud->points[1];

// 创建直线拟合对象
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
pcl::SACSegmentation<pcl::PointXYZ> seg;
seg.setOptimizeCoefficients(true);
seg.setModelType(pcl::SACMODEL_LINE);
seg.setMethodType(pcl::SAC_RANSAC);
seg.setDistanceThreshold(0.01);

// 设置输入点云数据
seg.setInputCloud(cloud);

// 设置直线拟合的输入点
pcl::PointIndices::Ptr indices(new pcl::PointIndices);
indices->indices.push_back(0);
indices->indices.push_back(1);
seg.setIndices(indices);

// 执行直线拟合
seg.segment(*inliers, *coefficients);

if (inliers->indices.size() == 0)
{
	PCL_ERROR("Could not estimate a planar model for the given dataset.");
	return -1;
}

// 可视化直线
viewer->addLine<pcl::PointXYZ>(cloud->points[inliers->indices[0]], cloud->points[inliers->indices[1]], "line");

// 输出直线参数
std::cout << "Line coefficients: ";
for (int i = 0; i < coefficients->values.size(); i++)
{
	std::cout << coefficients->values[i] << " ";
}
std::cout << std::endl;

// 显示点云和直线
while (!viewer->wasStopped())
{
	viewer->spinOnce(100);
	boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}

return 0;

}

C++ 代码:使用 PCL 库从点云中提取直线并输出直线参数

原文地址: http://www.cveoy.top/t/topic/puA5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录