3. 环境搭建:PCL安装与配置、Open3D安装、Python绑定、第一个点云可视化程序
说实话,环境搭建这件事,看着简单,但坑是真不少。我见过太多人卡在这一步,代码写好了,结果库装不上,心态直接崩了。今天咱们就把这事彻底捋清楚。
点云处理离不开两个主流库:PCL(Point Cloud Library)和Open3D。PCL是老牌劲旅,功能全面但编译麻烦;Open3D是后起之秀,Python接口友好,上手快。我的建议是——两个都装,各取所长。
3.1 PCL 安装——老司机的选择
PCL 的安装方式取决于你的操作系统。我个人最推荐 Linux 环境,因为坑最少。但如果你用 Windows,也别怕,有办法。
Windows 环境
Windows 下装 PCL,我建议直接用预编译的安装包。去 GitHub 的 PCL 仓库找 releases 页面,下载对应的 .exe 文件。安装时记得勾选「添加到系统路径」。
另一种方式是使用 vcpkg。如果你经常用 C++ 开发,vcpkg 是个好东西:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install pcl --triplet x64-windows
vcpkg 会自动处理所有依赖,包括 Boost、Eigen、FLANN 这些。嗯,省心不少。
Linux 环境
Ubuntu 用户最简单:
sudo apt-get update
sudo apt-get install libpcl-dev pcl-tools
但要注意,apt 仓库里的版本可能比较旧。如果你需要最新版,就得源码编译。我个人习惯用源码编译,因为可以控制编译选项,比如要不要 CUDA 支持。
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
sudo make install
-j4 参数,用 4 个线程并行编译,速度能快不少。如果你的 CPU 核心多,可以改成 -j8 甚至 -j16。
macOS 环境
macOS 用户用 Homebrew 最方便:
brew install pcl
不过 macOS 下的 PCL 可视化模块(VTK)有时会有显示问题。我遇到过几次窗口黑屏的情况,后来发现是 VTK 的 OpenGL 后端不兼容。解决办法是安装时指定使用 Cocoa 后端。
3.2 Open3D 安装——三分钟搞定
Open3D 的安装就简单多了。说白了,它就是为 Python 用户设计的。一行命令的事:
pip install open3d
或者用 conda:
conda install -c open3d-admin open3d
你想想看,这比 PCL 省了多少事?我刚开始用 Open3D 时,真的被它的安装速度惊到了。从 pip 到跑起来,三分钟都用不了。
如果你需要 C++ 版本的 Open3D,也可以源码编译:
git clone https://github.com/isl-org/Open3D.git
cd Open3D
mkdir build && cd build
cmake -DBUILD_PYTHON_MODULE=ON ..
make -j4
sudo make install
3.3 Python 绑定——让 C++ 库也能被 Python 调用
如果你主要用 Python,但又想用 PCL 的功能,那就需要 Python 绑定了。这里有几个选择:
| 绑定库 | 安装方式 | 特点 | 我的评价 |
|---|---|---|---|
| pclpy | pip install pclpy | 完整封装 PCL 功能 | 功能最全,但偶尔有兼容问题 |
| python-pcl | pip install python-pcl | 轻量级,维护较少 | 够用,但别指望更新 |
| Open3D 原生 API | 已包含在 open3d 中 | 纯 Python 风格,无需额外绑定 | 我最推荐,省心 |
我个人最推荐 pclpy,因为它几乎把 PCL 的所有功能都暴露给了 Python。安装也很简单:
pip install pclpy
但要注意,pclpy 依赖 PCL 的 C++ 库。如果你之前没装 PCL,它会自动下载预编译的二进制文件。不过在国内网络环境下,下载可能会很慢。我曾经等了一个小时还没下完,最后换了清华镜像才搞定。
pip install pclpy -i https://pypi.tuna.tsinghua.edu.cn/simple
3.4 第一个点云可视化程序——Hello, Point Cloud!
好了,环境搭好了,咱们来写第一个程序。我选 Open3D 来做演示,因为代码最短,效果最直观。
先创建一个简单的点云:
import open3d as o3d
import numpy as np
# 生成随机点云
points = np.random.rand(1000, 3) # 1000个随机点
point_cloud = o3d.geometry.PointCloud()
point_cloud.points = o3d.utility.Vector3dVector(points)
# 可视化
o3d.visualization.draw_geometries([point_cloud])
运行这段代码,你会看到一个 3D 窗口,里面漂浮着 1000 个随机点。你可以用鼠标拖拽旋转视角,滚轮缩放。嗯,这就是你的第一个点云可视化程序。
如果你想加点颜色:
# 给点云上色(根据坐标)
colors = np.zeros((1000, 3))
colors[:, 0] = points[:, 0] # R 通道用 x 坐标
colors[:, 1] = points[:, 1] # G 通道用 y 坐标
colors[:, 2] = points[:, 2] # B 通道用 z 坐标
point_cloud.colors = o3d.utility.Vector3dVector(colors)
o3d.visualization.draw_geometries([point_cloud])
现在点云有了渐变色,是不是好看多了?
pcl::visualization::CloudViewer viewer("Cloud Viewer");viewer.showCloud(cloud);但效果是一样的。我个人觉得 Open3D 的可视化更现代,交互更流畅。
最后,咱们用 PCL 的 Python 绑定也跑一个例子,感受一下区别:
import pclpy
from pclpy import pcl
# 创建点云
cloud = pcl.PointCloud.PointXYZ()
points = np.random.rand(100, 3).astype(np.float32)
cloud.from_array(points)
# 可视化
viewer = pcl.visualization.PCLVisualizer("PCL Viewer")
viewer.addPointCloud(cloud)
while not viewer.wasStopped():
viewer.spinOnce(100)
看到没?PCL 的代码更啰嗦一些,需要自己管理事件循环。但它的功能更底层,你能控制的东西也更多。
好了,环境搭好了,代码也跑了。接下来你就可以开始真正的点云滤波之旅了。记住,工具只是手段,理解原理才是关键。