PCL常用代码汇总

加载点云并可视化
#include "iostream"
#include <pcl/io/pcd_io.h>     //pcd读写文件
#include <pcl/point_types.h>   //点类型文件
#include <pcl/point_cloud.h>   
#include <pcl/visualization/cloud_viewer.h>
using namespace std;

int main()
{
	//定义一个点云指针
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	//加载点云并判定是否加载成功
	if (pcl::io::loadPCDFile<pcl::PointXYZ>("doki.pcd", *cloud) == -1)
	{
		PCL_ERROR("could not read file doki.pcd\n");
		return(-1);
	}
	cout << cloud->points.size() << endl;
	//----------------------------------------------------------------------------
		//定义一个点云可视化对象
	pcl::visualization::CloudViewer view("cloud_viewer");
	//可视化点云
	view.showCloud(cloud);
	while (!view.wasStopped())   //等待
	{

	}
	system("pause");
	return 0;
}
ISS关键点提取
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/io.h>
#include <pcl/keypoints/iss_3d.h>
#include <pcl/features/normal_3d.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/cloud_viewer.h>

using namespace std;

int main(int, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (pcl::io::loadPCDFile<pcl::PointXYZ>("Armadillo.pcd", *cloud) == -1)
	{
		PCL_ERROR("Could not read file\n");
	}
	cout << "读取点云个数: " << cloud->points.size() << endl;

	pcl::ISSKeypoint3D<pcl::PointXYZ, pcl::PointXYZ> iss;
	pcl::PointCloud<pcl::PointXYZ>::Ptr keypoints(new pcl::PointCloud<pcl::PointXYZ>());
	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());

	//-------------------传递索引----------------------------
		//vector <int>(point_indices);
		//pcl::IndicesPtr indices(new vector <int>(point_indices));
	iss.setInputCloud(cloud);
	iss.setSearchMethod(tree);
	iss.setNumberOfThreads(4);     //初始化调度器并设置要使用的线程数
	iss.setSalientRadius(1.0f);  // 设置用于计算协方差矩阵的球邻域半径
	iss.setNonMaxRadius(1.5f);   // 设置非极大值抑制应用算法的半径
	iss.setThreshold21(0.65);     // 设定第二个和第一个特征值之比的上限
	iss.setThreshold32(0.5);     // 设定第三个和第二个特征值之比的上限
	iss.setMinNeighbors(10);       // 在应用非极大值抑制算法时,设置必须找到的最小邻居数
	
	iss.compute(*keypoints);

	/*for (size_t ii = 0; ii < keypoints->points.size();++ii) {

			point_indices.push_back(iss.getKeypointsIndices()->indices[ii]);

		};*/
	cout << "ISS_3D points 的提取结果为 " << keypoints->points.size() << endl;
	//pcl::io::savePCDFile("keypoints_iss_3d.pcd", *keypoints, true);

	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D ISS"));
	viewer->setBackgroundColor(255,255,255);
	viewer->setWindowName("ISS关键点提取");
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0.0, 255, 0.0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");
	viewer->addPointCloud<pcl::PointXYZ>(keypoints, "key cloud");//特征点
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "key cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "key cloud");

	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100));
	}

	return 0;
}

代码运行时可能会报错:"pop_t"找不到标识符,解决这个问题需要将打开的dish.h文件第503行的typedef unsigned long long pop_t;剪切到第481行#if __GNUC__的上边位置即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜色如墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值