pcl

PCL viewer 多个点云ID冲突

匿名 (未验证) 提交于 2019-12-03 00:19:01
pcl: :visualization ::PCLVisualizer:: addPointCloud (const typename pcl: :PointCloud<PointT> ::ConstPtr &cloud, const std: :string &id, int viewport) 当需要多次赋值时,可以使用如下命令自动生成ID #include "string.h" //还需要添加C++ 11 pcl ::visualization ::PCLVisualizer viewer; for (int j = 0 ;j < 100 ;j ++ ) { viewer . addPointCloud(cloud_cluster, std ::to_string (j)); viewer . spinOnce (); } 想更新点云时,经常会出现如下错误 [addPointCloud] A PointCloud with id < 3 > already exists! Please choose a different id and retry. 此时可以在addPointCloud()前删除已有点云ID viewer .removePointCloud ( std ::to_string(j)) ; viewer .addPointCloud (cloud

安装slam开发环境,包括pcl和opencv+contrib等。

匿名 (未验证) 提交于 2019-12-02 23:43:01
全新安装的ubuntu1604,按以下安装步骤安装,验证可用。先切换软件源为清华的源。eigen在安装opencv时已经安装了,所以后面没有单独写。 先安装QT5,从Qt官网下载开源版本,官网地址:https://www.qt.io/download-open-source/#section-2 sudo chmod u+x qt-unified-linux-x64-3.0.2-online.run sudo ./qt-unified-linux-x64-3.0.2-online.run 3.安装opencv+opencvcontrib 3.4.3 sudo apt-get install libopenblas-dev sudo apt-get -y install libgstreamer-plugins-base1.0-dev sudo apt-get -y install libgstreamer1.0-dev sudo apt-get install libgtk-3-dev 安装过程要下载的两个文件,放在.cach中,可以从cmake-gui中查看名字,然后 修改名字再放到cach中即可 4.装pcl,用cmake-tool选择cmake选项,注意visualization模块 sudo apt-get install qt-sdk openjdk-8-jdk

使用pcl将bin文件转化为pcd文件

匿名 (未验证) 提交于 2019-12-02 23:43:01
使用pcl将bin文件转化为pcd文件 环境搭载:ubuntu16.04 之后正式操作具体如下: 在home下,新建文件夹PointCloud(我建在这里,大家随意),在PointCloud文件里继续新建文件夹bin2pcd,在bin2pcd文件里继续新建文件夹velodyne和build,同时新建文档bin2pcd.cpp和CMakeLists.txt,进入新建等velodyne文件里,继续新建文件夹bin和pcd,到此,新建操作结束。 然后将测试的bin文件放入velodyne里的bin文件夹里,我这里只放了7个bin文件。接着把空文档bin2pcd.cpp和CMakeLists.tx的代码补上,代码以及上述操作,如下列图示: 代码不需要更改: bin2pcd.cpp代码如下: #include <boost/program_options.hpp> #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/common/point_operators.h> #include <pcl/common/io.h> #include <pcl/search/organized.h> #include <pcl/search/octree.h> #include <pcl/search/kdtree.h

pcl第一个例子程序

匿名 (未验证) 提交于 2019-12-02 23:43:01
#include "stdafx.h" #include <iostream> //标准输入输出流 #include <pcl/io/pcd_io.h> //PCL的PCD格式文件的输入输出头文件 #include <pcl/io/ply_io.h> #include <pcl/point_types.h> //PCL对各种格式的点的支持头文件 #include <pcl/visualization/cloud_viewer.h> int _tmain(int argc, _TCHAR* argv[]) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 创建点云(指针) if (pcl::io::loadPCDFile<pcl::PointXYZ>("horse.pcd", *cloud) == -1) //* 读入PCD格式的文件,如果文件不存在,返回-1 { PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在时,返回错误,终止程序。 return (-1); } pcl::PLYWriter writer; writer.write("horse.ply",*cloud); pcl:

PCL passfilter 使用

匿名 (未验证) 提交于 2019-12-02 23:43:01
#include "stdafx.h" #include <iostream> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> #include <pcl/visualization/cloud_viewer.h> using namespace std; int main(int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>); // Fill in the cloud data 随机产生点云数据 5个点 cloud->width = 5; cloud->height = 1; cloud->points.resize(cloud->width * cloud->height); for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024 * rand() / (RAND_MAX +

PCL PCD文件读写

匿名 (未验证) 提交于 2019-12-02 23:37:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jqw11/article/details/90749295 /* 时隔一年,又回来做双目视觉方向,需要重新启航,加油!!! */ #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main() { //--------------------------------------------点云数据读入------------------------------------------------------------- //定义点云数据 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); // 定义读取对象 pcl::PCDReader reader; // 读取点云文件 reader.read<pcl::PointXYZ> ("test.pcd", *cloud); //-------------------------------------------------------------点云数据写入--------------------------------

向pcd文件写入点云数据

匿名 (未验证) 提交于 2019-12-02 23:36:01
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main(int argc,char**argv) { pcl::PointCloud<pcl::PointXYZ> cloud; cloud.width=5; cloud.height=1; cloud.is_dense=false; cloud.points.resize(cloud.width*cloud.height); for(size_t i=0;i<cloud.points.size();++i) { cloud.points[i].x=1024*rand()/(RAND_MAX+1.0f); cloud.points[i].y=1024*rand()/(RAND_MAX+1.0f); cloud.points[i].z=1024*rand()/(RAND_MAX+1.0f); } pcl::io::savePCDFileASCII("test_pcd.pcd",cloud); std::cerr<<"Saved "<<cloud.points.size()<<" data points to test_pcd.pcd."<<std::endl; for(size_t i=0;i<cloud.points

kd-tree

匿名 (未验证) 提交于 2019-12-02 23:36:01
kd-tree 简单理解为一种数据结构(所以点云数据处理中最为核心的问题就是建立离散点间的拓扑关系,实现基于邻域关系的快速查找。) k-d树 (k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。K-D树是二进制空间分割树的特殊的情况。用来组织表示K维空间中点的几何,是一种带有其他约束的二分查找树,为了达到目的,通常只在三个维度中进行处理因此所有的kd_tree都将是三维的kd_tree,kd_tree的每一维在指定维度上分开所有的字节点,在树 的根部所有子节点是以第一个指定的维度上被分开。 k-d树算法可以分为两大部分,一部分是有关k-d树本身这种数据结构建立的算法,另一部分是在建立的k-d树上如何进行最邻近查找的算法。 #include <pcl/point_cloud.h> #include <pcl/kdtree/kdtree_flann.h> #include <iostream> #include <vector> #include <ctime> int main (int argc, char**argv) { srand (time (NULL)); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl:

从pcd文件读取数据

匿名 (未验证) 提交于 2019-12-02 23:36:01
由于项目需要,接触点云处理,做一下学习记录。 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main(int argc,char** argv) // pcl 函数名的方式 { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); if(pcl::io::loadPCDFile<pcl::PointXYZ>("maize.pcd",*cloud)==-1)//*打开点云文件 { PCL_ERROR("Couldn't read file test_pcd.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 <<" "<