pcl 点云拼接基础(1)

一、点云暴力拼接 

 

 

      	   //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");

猜你喜欢

转载自blog.csdn.net/weixin_39354845/article/details/129666968