PCL은 RANSAC법으로 점 구름 평면을 구하고 평면 점을 표시한다
#include
#include
#include
#include
#include
#include
#include
#include
#include
void main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());//
if (pcl::io::loadPCDFile("save.pcd", *cloud))
{
std::cerr << "ERROR: Cannot open file " << std::endl;
return;
}
// ,
pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
//inliers
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
//
pcl::SACSegmentation<pcl::PointXYZ> seg;
// Optional, 。
seg.setOptimizeCoefficients(true);
// Mandatory-
seg.setModelType(pcl::SACMODEL_PLANE);
// :
seg.setMethodType(pcl::SAC_RANSAC);
// ,
seg.setDistanceThreshold(0.01);
//
seg.setInputCloud(cloud);
// ,
seg.segment(*inliers, *coefficients);
//
std::cout << "x:" << coefficients->values[0] << endl;
std::cout << "y:" << coefficients->values[1] << endl;
std::cout << "z:" << coefficients->values[2] << endl;
//
pcl::PointCloud<pcl::PointXYZ>::Ptr clicked_points_3d(new pcl::PointCloud<pcl::PointXYZ>);
for (int i = 0; i < inliers->indices.size(); ++i)
{
clicked_points_3d->points.push_back(cloud->points.at(inliers->indices[i]));
}
//
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("viewer"));
//
viewer->addPointCloud(cloud, "data");
//
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> red(clicked_points_3d, 255, 0, 0);
std::string cloudName="plane";
viewer->addPointCloud(clicked_points_3d, red, cloudName);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 5, cloudName);
// ,
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[ROS] PointCloud2의 영역을 자르기소개 ROS의 PointCloud2를 잘라내는 방법이 없는지 생각해 보았습니다. jsk-pcl-ros라는 패키지의 attention_clipper를 사용하면 지정된 box 내의 점 구름을 잘라내는 것을 알았습니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.