【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
随着三维数据在计算机视觉和机器人领域的广泛应用,点云数据成为了一个重要的数据形式,而PCL(Point Cloud Library)则是一个用于处理点云数据的强大库。当你需要在处理点云数据时,了解点云的基本信息是非常重要的。在这篇博文中,我们将介绍一个用于打印点云基本信息的函数pcdinfo_print,该函数可以帮助你快速获取点云的大小、边界、三维尺寸、质心坐标和平均密度等信息。
1 示例程序
示例点云rabbit.pcd下载地址为https://download.youkuaiyun.com/download/suiyingy/85129456。
/*
更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.youkuaiyun.com/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。
*/
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/common/common.h>
#include <pcl/features/normal_3d.h>
using namespace std;
// 打印点云基本信息
// 打印点云基本信息
void pcdinfo_print(pcl::PointCloud<pcl::PointXYZ>::Ptr pcd, std::string prefix = "原始点云") {
Eigen::Vector4f lb, ub, cr;
pcl::getMinMax3D(*pcd, lb, ub);
pcl::compute3DCentroid(*pcd, cr);
float density = pcd->points.size() / ((ub - lb).head<3>().prod());
std::cout << "[info] " << prefix << "数量:" << pcd->size() << std::endl;
std::cout << "[info] " << prefix << "下边界:" << lb << std::endl;
std::cout << "[info] " << prefix << "上边界:" << ub << std::endl;
std::cout << "[info] " << prefix << "三维尺寸:" << ub - lb << std::endl;
std::cout << "[info] " << prefix << "质心坐标:" << cr << std::endl;
std::cout << "[info] " << prefix << "平均密度:" << density << std::endl;
}
int main (int argc, char** argv)
{
// 读取.pcd文件
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ> ("../../rabbit.pcd", *cloud) == -1) //* 读入PCD文件
{
PCL_ERROR ("Couldn't read file example_cloud.pcd \n");
return (-1);
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from rabbit.pcd with the following fields. "
<< std::endl;
pcdinfo_print(cloud, "原始点云");
return 0;
}
运行结果如下所示。
2 程序解析
首先,让我们看一下`pcdinfo_print`函数的代码实现。这个函数接受一个`pcl::PointCloud<pcl::PointXYZRGB>::Ptr`类型的指针作为输入,以及一个可选的前缀字符串用于标识点云数据。函数内部使用PCL库提供的函数来计算点云的最小最大边界、三维尺寸、质心坐标和平均密度,并将这些信息打印到控制台上。
接下来,我们可以逐步解释这个函数的功能和输出结果:
pcd->size():打印点云的大小,即点云中点的个数。
lb和ub:分别代表点云的下边界和上边界,通过这两个向量可以了解点云数据的空间范围。
ub - lb:计算点云的三维尺寸,即点云数据在三个坐标轴上的长度、宽度和高度。
cr:计算点云的质心坐标,表明点云数据的中心位置。
density:计算点云的平均密度,即点云中点的数量除以点云体积。
通过调用`pcdinfo_print`函数,你可以轻松地获取并打印出点云数据的关键信息,帮助你更好地理解和分析点云数据。这对于点云处理、特征提取和模型构建都具有重要意义。
总的来说,了解如何获取和打印点云的基本信息是点云处理中的基础工作,而`pcdinfo_print`函数提供了一个简洁而有效的方法来实现这一目的。希朝这篇博文能够帮助你更好地理解点云数据的特性和结构,进一步深入研究点云相关的应用领域。
【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.youkuaiyun.com/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。