一、点云暴力拼接
//Findnowd("C:\\Users\\Albert\\Desktop\\A1.pcd");
pcl::PointCloud<pcl::PointXYZRGB>cloud_a, cloud_b, cloud_c;
cloud_a.width = 500;
cloud_a.height = cloud_b.height = 20;
cloud_a.points.resize(cloud_a.width * cloud_a.height);
for (size_t i = 0; i < cloud_a.size(); i++)
{
cloud_a.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_a.points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_a.points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_a.points[i].r = 200;
// cerr << " " << cloud_a.points[i].x << " " << cloud_a.points[i].y << " " << cloud_a.points[i].z << endl;
}
cout << "cloud_a 的大小 :" << cloud_a.size() << endl;
pcl::io::savePCDFileBinaryCompressed("./PerpendicularityVaro/B/cloud_a.pcd", cloud_a);
cerr << "Cloud B:" << endl;
cloud_b.width = 300;
cloud_b.points.resize(cloud_b.width * cloud_b.height);
for (size_t i = 0; i < cloud_b.size(); i++)
{
cloud_b.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_b.points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_b.points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_b.points[i].r = 0;
cloud_b.points[i].b = 250;
// cerr << " " << cloud_b.points[i].x << " " << cloud_b.points[i].y << " " << cloud_b.points[i].z << endl;
}
cout << "cloud_b 的大小 :"<< cloud_b.size()<< endl;
pcl::io::savePCDFileBinaryCompressed("./PerpendicularityVaro/B/cloud_b.pcd", cloud_b);
pcl::PointCloud<pcl::PointNormal> cloud_normal_c;
cerr << "拼接之后:Cloud C:" << endl;
cloud_c = cloud_a;
cloud_c += cloud_b; // 简单粗暴。
// pcl::concatenateFields(cloud_a, cloud_b, cloud_normal_c);
for (size_t i = 0; i < cloud_c.size(); i++)
{
cloud_c.points[i].r = 255;
}
cout << "cloud_c 的大小 :" << cloud_c.size() << endl;
pcl::io::savePCDFileBinaryCompressed("./PerpendicularityVaro/B/cloud_c.pcd", cloud_c);
二、将点和Normal 组合到一起
pcl::PointCloud<pcl::PointXYZ>cloud_a;
pcl::PointCloud<pcl::Normal>n_cloud_b;
pcl::PointCloud<pcl::PointNormal> p_n_cloud_c;
cerr << "Cloud A:" << endl;
cloud_a.width = 500;
cloud_a.height = n_cloud_b.height = 10;
cloud_a.points.resize(cloud_a.width * cloud_a.height);
for (size_t i = 0; i < cloud_a.size(); i++)
{
cloud_a.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_a.points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
cloud_a.points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
//cerr << " " << cloud_a.points[i].x << " " << cloud_a.points[i].y << " " << cloud_a.points[i].z << endl;
}
cout << "cloud_a 的大小 :" << cloud_a.size() << endl;
cerr << "Cloud B:" << endl;
n_cloud_b.width = 500;
n_cloud_b.points.resize(n_cloud_b.width * n_cloud_b.height);
for (size_t i = 0; i < n_cloud_b.size(); i++)
{
n_cloud_b.points[i].normal[0] = 1024 * rand() / (RAND_MAX + 1.0f);
n_cloud_b.points[i].normal[1] = 1024 * rand() / (RAND_MAX + 1.0f);
n_cloud_b.points[i].normal[2] = 1024 * rand() / (RAND_MAX + 1.0f);
}
cout << "n_cloud_b 的大小 :" << n_cloud_b.size() << endl;
cout << endl;
cout << "Cloud C:" << endl;
pcl::concatenateFields(cloud_a, n_cloud_b, p_n_cloud_c);
cout << "p_n_cloud_c 的大小 :" << p_n_cloud_c.size() << endl;
system("pause");