本文主要记录在Ubuntu
系统的PCL
点云库安装过程,以及PCL
点云读取和可视化的c++
代码示例。
本文是安装了pcl1.8
大版本,可先下载 下载pcl 1.8.1 版本(点击Source code(zip)
先安装pcl1.8.1
所需的依赖库:
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.9 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk7.1-qt libvtk7.1
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install openjdk-8-jdk openjdk-8-jre
然后解压下载的pcl1.8.1
源码,并进入到pcl1.8.1
文件夹中:
mkdir build
cd build
cmake ..
make -j4
sudo make install
测试pcl
是否安装成功的话,可用pcl_viewer xxx.pcd
:
如果没有pcd
文件,可去点云库PCL(Point Cloud Library)的学习资源汇总下载rabbit.pcd
pcl_viewer rabbit.pcd
安装PCL
库之后,就像OpenCV
读取lena
图像一样,PCL
入门先编写读取兔子(rabbit.pcd
放到了data
文件夹中)点云的代码,如下是主要的点云读取和可视化代码,及对应的CMakeLists.txt
文件。
main.cpp
文件:
#include
#include
#include
#include
#include
int main(int argc, char **argv) {
// 创建PointCloud的智能指针
// pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
// rabbit.pcd 只有xyz,没有rgb等
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
// 加载pcd文件到cloud
if(pcl::io::loadPCDFile("../data/rabbit.pcd", *cloud) == -1){
PCL_ERROR("No 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;
}
CMakeLists.txt
文件:
cmake_minimum_required(VERSION 2.8)
project(PCLDemo)
set(CMAKE_CXX_STANDARD 11)
find_package(PCL REQUIRED)
# 包含头文件目录
include_directories(${PCL_INCLUDE_DIRS})
# 设置依赖库链接目录
link_directories(${PCL_LIBRARY_DIRS})
# 添加预处理器和编译器标记
add_definitions(${PCL_DEFINITIONS})
add_executable(PCLDemo main.cpp)
target_link_libraries(PCLDemo ${PCL_LIBRARIES})
PCLDemo
文件树:
.
├── CMakeLists.txt
├── data
│ └── rabbit.pcd
└── main.cpp
在PCLDemo
文件夹下新开终端,执行如下命令:
mkdir build
cd build
cmake ..
make -j4
# 运行
./PCLDemo
运行结果:(可鼠标滚轮缩放)
如果觉得上图显示的黑色背景有点单调,也可以修改背景色,在上述代码基础上增加viewerOneOff
函数和该函数调用viewer.runOnVisualizationThreadOnce(viewerOneOff)
:
#include
#include
#include
#include
#include
// 设置可视化背景颜色
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer);
int main(int argc, char **argv) {
// 创建PointCloud的智能指针
// pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
// rabbit.pcd 只有xyz,没有rgb等
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
// 加载pcd文件到cloud
if(pcl::io::loadPCDFile("../data/rabbit.pcd", *cloud) == -1){
PCL_ERROR("No 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;
}
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer){
viewer.setBackgroundColor(1.0f, 0.5f, 0.2f); //(R=1.0)、绿色(G=0.5)和蓝色(B=0.2)
}
然后重新编译运行,运行结果如下:
Reference:
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔