基于PCL利用kdtree计算点云点距均值

C++程序运行闪退解决方法:

1.主函数中return 0;前加getchar();需要头文件

2.主函数return 0;前加system("pause");

其中代码中在main()函数中添加return true前加了getchar();

注意:代码中提示无法找到源文件pch.h,可以将其注释掉,对代码运行不产生影响!

代码如下:

// PointCloudsDis.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

//#include "pch.h"
#include 
#include
#include 
#include 
#include 
#include 
#include 
#include
#include

using namespace std;

double computerCloudResolution(const pcl::PointCloud::ConstPtr cloud) {
	double res = 0.0;
	int n_points = 0;
	int nres;
	std::vector indices(2);
	std::vector sqr_distances(2);
	pcl::search::KdTree tree;
	tree.setInputCloud(cloud);

	for (size_t i = 0; i < cloud->size(); ++i)
	{
		if (!std::isfinite((*cloud)[i].x))
		{
			continue;
		}
		nres = tree.nearestKSearch(i, 2, indices, sqr_distances);
		if (nres == 2)
		{
			res += sqrt(sqr_distances[1]);
			++n_points;
		}
	}
	if (n_points != 0)
	{
		res /= n_points;
	}

	return res;
	
}

int main()
{
	ifstream data;
	data.open("knee_piece.TXT", ios::in);

	int rows = -1;
	char buf[200];
	while (!data.eof()) {
		data.getline(buf, sizeof(buf));
		rows++;
	}
	data.clear();
	data.seekg(0, ios::beg);
	//pcl::PointCloudcloud;
	pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
	cloud->width = rows;
	cloud->height = 1;
	cloud->is_dense = false;
	cloud->resize(cloud->width*cloud->height);

	for (int i = 0; i < rows; i++) {
		double num[3];
		data >> num[0];
		data >> num[1];
		data >> num[2];

		cloud->points[i].x = num[0];
		cloud->points[i].y = num[1];
		cloud->points[i].z = num[2];
	}

	double res = computerCloudResolution(cloud);
	cout << "distance=" << res << endl << "rows=" << rows;

	getchar();  //防止窗口闪退
	return true;
}

温馨提示:

积分下载名字叫“基于PCL的点云平均间距计算”,其实真没什么意思,就是以下这段代码,其实和上文中的一样的,况且代码中仅有计算点云间距的代码!下载链接:https://download.csdn.net/download/lishuai666/11394470?depth_1-utm_source=distribute.pc_relevant.none-task-download-BlogCommendFromBaidu-5&utm_source=distribute.pc_relevant.none-task-download-BlogCommendFromBaidu-5

不要冤枉浪费积分!

#include 

float means_re(pcl::PointCloud::Ptr cloud)
{
	float res = 0.0;
	int n_points = 0;
	int nres;
	std::vector indices(2);
	std::vector sqr_distances(2);
	pcl::KdTreeFLANN tree;
	tree.setInputCloud(cloud);

	for (size_t i = 0; i < cloud->size(); ++i)
	{
		if (!pcl_isfinite(cloud->points[i].x))
		{
			continue;
		}
		//Considering the second neighbor since the first is the point itself.
		nres = tree.nearestKSearch(i, 2, indices, sqr_distances);
		if (nres == 2)
		{
			res += sqrt(sqr_distances[1]);
			++n_points;
		}
	}
	if (n_points != 0)
	{
		res /= n_points;
	}
	//std::cout <<"平均距离:"<

 参考博文:

1、https://blog.csdn.net/qq_39707351/article/details/93470524?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

2、https://blog.csdn.net/Using_head/article/details/80851144?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3

 

你可能感兴趣的:(PCL)