python读取pcd文件_PCL读取PCD文件的数据
1.pcd文件——rabbit.pcd
新建項目pcl
rabbit.pcd 和pcl.cpp在同一目錄下
2.讀取文件
(1)顯示數(shù)據(jù)
#include#include#include
int main(int argc, char**argv) {
//創(chuàng)建了一個名為cloud的指針,儲存XYZ類型的點云數(shù)據(jù)
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);//
//*打開點云文件
if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {
PCL_ERROR("Couldn't read file rabbit.pcd\n");return(-1);
}
std::cout<< "Loaded:" << cloud->width*cloud->height<points.size(); ++i) {
std::cout<< " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << " " <<:endl>
}
system("pause");return 0;
}
文件里的數(shù)據(jù)就一次顯示出來了
說明:
PointCloud是PCL中的一個基類,pcl::PointCloud<:pointxyz>::Ptr是一個Boost共享指針
PointCloud中的數(shù)據(jù)域
width(int),如果是無組織,無結(jié)構的點云數(shù)據(jù),表示點云的個數(shù);如果是有結(jié)構的點云數(shù)據(jù),表示點云數(shù)據(jù)集一行的點數(shù)。
height(int),如果是無結(jié)構的點云數(shù)據(jù),height=1;如果是有結(jié)構的點云數(shù)據(jù),height表示點云總行數(shù)。
points(std::vector)存儲了數(shù)據(jù)類型為PointT的一個動態(tài)數(shù)組。
PointXYZ 是最常見的一個點數(shù)據(jù)類型,它只包含三維X,Y,Z坐標信息
X:points[i].x
size_t 整型,保存一個整數(shù),記錄一個大小(size)
points.size() 表示點云數(shù)據(jù)大小
(2)數(shù)據(jù)可視化
#include#include#include#include
int main(int argc, char**argv) {
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);//
//*打開點云文件
if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {
PCL_ERROR("Couldn't read file rabbit.pcd\n");return(-1);
}
std::cout<< cloud->points.size() <<:endl>
pcl::visualization::CloudViewer viewer("cloud viewer");
viewer.showCloud(cloud);while (!viewer.wasStopped()) {
}
system("pause");return 0;
}
運行結(jié)果
轉(zhuǎn)一下滾輪
修改背景色
#include#include#include#include
void viewerOneOff(pcl::visualization::PCLVisualizer&viewer) {
viewer.setBackgroundColor(1.0f, 0.5f, 1.0f);
}int main(int argc, char**argv) {
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);//*打開點云文件
if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {
PCL_ERROR("Couldn't read file rabbit.pcd\n");return(-1);
}
std::cout<< cloud->points.size() <<:endl>
pcl::visualization::CloudViewer viewer("cloud viewer");
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
system("pause");return 0;
}
輸出文字
#include#include#include#include
intuser_data;void viewerOneOff(pcl::visualization::PCLVisualizer&viewer) {
viewer.setBackgroundColor(1.0f, 0.5f, 1.0f);
}voidviewerPsycho(pcl::visualization::PCLVisualizer&viewer)
{static unsigned count = 0;
std::stringstream ss;
ss<< "Once per viewer loop:" << count++;
viewer.removeShape("text", 0);
viewer.addText(ss.str(),20, 100, "text", 0);//this is to set the coordination of text "Once per viewer loop:"
user_data++;
}int main(int argc, char**argv) {
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);//*打開點云文件
if (pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud) == -1) {
PCL_ERROR("Couldn't read file rabbit.pcd\n");return(-1);
}
std::cout<< cloud->points.size() <<:endl>
pcl::visualization::CloudViewer viewer("cloud viewer");
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
viewer.runOnVisualizationThread(viewerPsycho);
system("pause");return 0;
}
總結(jié)
以上是生活随笔為你收集整理的python读取pcd文件_PCL读取PCD文件的数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程导论复习之详细设计
- 下一篇: 定义一个 Room 类,包含成员变量面积