PCL库导入点云模型以及常见问题分析

PCL程序运行后先加载所有的点云坐标,被刷屏了,等待时间较长。
我上传了免费的兔子点云模型,链接见https://download.csdn.net/download/Asabc12345/12488127
运行后先加载点云坐标
加载后的点云模型


#include <iostream> //标准输入输出流
#include <pcl/io/pcd_io.h> //PCL的PCD格式文件的输入输出头文件
#include <pcl/io/ply_io.h> //PCL的ply格式文件的输入输出头文件
#include <pcl/point_types.h> //PCL对各种格式的点的支持头文件
#include <pcl/visualization/cloud_viewer.h>

int main(int argc, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 创建点云(指针)

	if (pcl::io::loadPLYFile<pcl::PointXYZ>("C:\\Users\\fhlhc\\Desktop\\点云模型\\rabbit.ply", *cloud) == -1) //* 读入PCD格式的文件,如果文件不存在,返回-1
	{
		PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在时,返回错误,终止程序。
		return (-1);
	}
	std::cout << "Loaded "
		<< cloud->width * cloud->height
		<< " data points from test_file.pcd with the following fields: "
		<< std::endl;
	for (size_t i = 0; i < cloud->points.size(); ++i) //显示所有的点
	//for (size_t i = 0; i < cloud->size(); ++i) // 为了方便观察,只显示前5个点
		std::cout << "    " << cloud->points[i].x
		<< " " << cloud->points[i].y
		<< " " << cloud->points[i].z << std::endl;
	pcl::visualization::CloudViewer viewer("pcd viewer");
	viewer.showCloud(cloud);
	system("pause");
	return (0);
}

//#include<pcl/visualization/cloud_viewer.h>
//#include<iostream>//标准C++库中的输入输出类相关头文件。
//#include<pcl/io/io.h>
//#include<pcl/io/pcd_io.h>//pcd 读写类相关的头文件。
//#include<pcl/io/ply_io.h>
//#include<pcl/point_types.h> //PCL中支持的点类型头文件。
//int user_data;
//using std::cout;
//
//
//void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
//    viewer.setBackgroundColor(1.0, 0.5, 1.0);   //设置背景颜色
//}
//
//int main() {
//    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
//
//    char strfilepath[256] = "E:\\intern\\rabbit.pcd";
//    if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
//        cout << "error input!" << endl;
//        return -1;
//    }
//
//    cout << cloud->points.size() << endl;
//    pcl::visualization::CloudViewer viewer("Cloud Viewer");     //创建viewer对象
//
//    viewer.showCloud(cloud);
//    viewer.runOnVisualizationThreadOnce(viewerOneOff);
//    system("pause");
//    return 0;
//}
//

常见问题:
1.运行后不报错但是不显示,输出-1。
问题分析:点云模型格式或者文件有问题,换一个文件试试。
#include <pcl/io/pcd_io.h> //PCL的PCD格式文件的输入输出头文件
#include <pcl/io/ply_io.h> //PCL的ply格式文件的输入输出头文件
这两个头文件代表点云的格式,如果你是ply的格式,但是只加载了PCD的头文件,是运行不出来的,检查头文件少没少。
注意加载不同格式点云时,loadPCDFile这里也要改,导入ply格式的话就要把PCD改成loadPLYFile。
在这里插入图片描述

2.报错
parse error: couldn’t read the magic string
[pcl::PLYReader::read] problem parsing header!
[pcl::PLYReader::read] problem parsing header!
Couldn’t read ply file

错误分析:路径什么都没问题的话,我也没找到具体的原因,反正我后来换了点云模型重新加载就解决了

如果只是想简单的调用点云读取或者显示不做进一步研究的话,只需要用其他成熟的商业软件比如MeshLab,傻瓜无脑操作,新手友好哈哈哈meshlab的显示界面

引用\[1\]和\[2\]提供了使用Python的pcl显示点云的示例代码。您可以按照这些示例代码的步骤来显示点云。 首先,您需要导入必要的,如numpy、pcl和pcl.pcl_visualization。然后,您可以使用pcl.load函数从文件中加载点云数据。例如,使用pcl.load('E:\\anbo.pcd')加载名为anbo.pcd的点云文件。 接下来,您可以对点云数据进行处理。例如,您可以将点云数据居中,通过计算点云数据的平均值并将其减去。然后,您可以将处理后的点云数据转换为pcl格式,并创建一个CloudViewing对象。 最后,您可以使用visual.ShowMonochromeCloud函数显示点云。这将在一个窗口中显示点云,并且该窗口将保持打开状态,直到您手动关闭它。 请注意,您可能需要根据您的实际情况修改代码中的文件路径和变量名。此外,您还可以根据需要进行其他自定义,如添加颜色处理器或在循环中更新点云数据。 希望这些信息对您有所帮助!如果您有任何其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [vscode python3.6配置pcl点云 obj3d模型pcd点云图](https://blog.csdn.net/qq_41490154/article/details/130241783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python-pcl 动态实时显示点云](https://blog.csdn.net/scy261983626/article/details/122256716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

滑了丝的螺丝钉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值