ubuntu pcl 初步使用读取pcd文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ubuntu pcl 初步使用读取pcd文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4511字,纯文字阅读大概需要7分钟。
内容图文
![ubuntu pcl 初步使用读取pcd文件](/upload/InfoBanner/zyjiaocheng/928/42947e0ce180438ea4d2a88c4091dada.jpg)
环境:Ubuntu 16.04
当我们安装好PCL之后 (安装方法见:ubuntu16.04 安装 pcl),我们使用pcl来3D显示一个pcd文件内容
下载一个pcd文件 rabbit.pcd
链接:https://pan.baidu.com/s/1VWbTInrZ3Z9g23baage7ow
提取码:2ins
将rabbit.pcd文件放在文件夹中,打开终端输入
pcl_viewer rabbit.pcd
滚动鼠标滚轮,可以看到兔子的3D点云
二、编写程序 读取pcd文件内容
1、在pcd文件同级目录下创建 pcl_test.cpp CMakeLists.txt
CMakeList.txt
cmake_minimum_required(VERSION 2.6) project(pcl_test) find_package(PCL 1.2 REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable(pcl_test pcl_test.cpp) target_link_libraries (pcl_test ${PCL_LIBRARIES}) install(TARGETS pcl_test RUNTIME DESTINATION bin)
pcl_test.cpp
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> int main(int argc, char** argv) { //创建了一个名为cloud的指针,储存XYZ类型的点云数据 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //*打开点云文件 if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) { PCL_ERROR("Couldn't read file rabbit.pcd\n"); return(-1); } std::cout << "Loaded:" << cloud->width*cloud->height<<"data points from test_pcd.pcd with the following fields:"<< std::endl; //输出点云数据 for (size_t i = 0; i < cloud->points.size(); ++i) { std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << " " << std::endl; } return 0; }
说明:
PointCloud是PCL中的一个基类,pcl::PointCloud<pcl::PointXYZ>::Ptr是一个Boost共享指针
PointCloud中的数据域
width(int),如果是无组织,无结构的点云数据,表示点云的个数;如果是有结构的点云数据,表示点云数据集一行的点数。
height(int),如果是无结构的点云数据,height=1;如果是有结构的点云数据,height表示点云总行数。
points(std::vector)存储了数据类型为PointT的一个动态数组。
PointXYZ 是最常见的一个点数据类型,它只包含三维X,Y,Z坐标信息
X:points[i].x
size_t 整型,保存一个整数,记录一个大小(size)
points.size() 表示点云数据大小
在终端中输入
cmake . make
生成可执行程序pcl_test
运行 pcl_test 可看到点云数据
2、 数据可视化
pcl_test.cpp
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> #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::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) { PCL_ERROR("Couldn't read file rabbit.pcd\n"); return(-1); } std::cout << cloud->points.size() << std::endl; pcl::visualization::CloudViewer viewer("cloud viewer"); viewer.showCloud(cloud); while (!viewer.wasStopped()) { } return 0; }
终端中重新编译
make ./pcl_test
3、修改背景
pcl_test.cpp
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) { viewer.setBackgroundColor(1.0f, 0.5f, 1.0f); } int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //*打开点云文件 if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) { PCL_ERROR("Couldn't read file rabbit.pcd\n"); return(-1); } std::cout << cloud->points.size() << std::endl; pcl::visualization::CloudViewer viewer("cloud viewer"); viewer.showCloud(cloud); viewer.runOnVisualizationThreadOnce(viewerOneOff); while (!viewer.wasStopped()) { } return 0; }
4、
pcl_test.cpp
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> int user_data; void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) { viewer.setBackgroundColor(1.0f, 0.5f, 1.0f); } void viewerPsycho(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<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //*打开点云文件 if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud) == -1) { PCL_ERROR("Couldn't read file rabbit.pcd\n"); return(-1); } std::cout << cloud->points.size() << std::endl; pcl::visualization::CloudViewer viewer("cloud viewer"); viewer.showCloud(cloud); viewer.runOnVisualizationThreadOnce(viewerOneOff); viewer.runOnVisualizationThread(viewerPsycho); while (!viewer.wasStopped()) { } return 0; }
内容总结
以上是互联网集市为您收集整理的ubuntu pcl 初步使用读取pcd文件全部内容,希望文章能够帮你解决ubuntu pcl 初步使用读取pcd文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。