需求: 通过安装python-pcl库, 可以使用pcl中的某些函数。例如, 使用open3d 读取pcd文件时,只保留xyz信息,无法获取强度值。故采用python-pcl中的函数 load 进行读取。
参考:Ubuntu 18.04安装python-pcl 解决ImportError: libpcl_keypoints.so.1.7问题
首先按照参考文的里面的过程,一路顺利。但是测试时,在python中import pcl时,出现新的错误,在博文问题中也有人问到相同的问题,错误如下:
import pcl
undefined symbol: _ZN3pcl6search6KdTreeINS_12PointXYZRGBAENS_11KdTreeFLANNIS2_N5flann9L2_SimpleIfEEEEE13setInputCloudERKN5boost10shared_ptrIKNS_10PointCloudIS2_EEEERKNSA_IKSt6vectorIiSaIiEEEE
猜测原因:库在使用过程中链接了错误的版本,导致出现了未定义的符号。
sudo apt-get install libpcl-dev pcl-tools
sudo apt-get install libgl1-mesa-dev #需要先安装opengl
sudo apt-get install libxt-dev
下载VTK7.1.1源码
登录 https://vtk.org/download/ ,下载 An Earlier Release (7.1.1)中,Platform: source 下面的VTK-7.1.1.tar.gz。
解压与编译、安装
tar -xf VTK-7.1.1.tar.gz
mkdir build
cd build && cmake ..
make -j8
sudo make install
注意:安装完成后,VTK安装位置如下:
/usr/local/include/vtk-7.1 #包含目录,头文件所在
/usr/local/lib # 动态库目录
rm -rf /home/cui/anaconda3/envs/learning3d/lib/python3.6/site-packages/pcl/
git clone https://github.com/strawlab/python-pcl.git(原版,如果速度慢请使用下面的)
git clone https://gitee.com/lucy2020/python-pcl.git
修改726行为:vtk_version = '7.1'
修改729行为:vtk_include_dir = os.path.join('/usr/local/include/vtk-' + vtk_version)
修改730行为:vtk_library_dir = os.path.join('/usr/local/lib')
python setup.py build_ext -i
python setup.py install
可以正常在python3.6环境中愉快的使用pcl了,如下面的小例子,点云数据转换为numpy:
import numpy as np
import pcl
p = pcl.PointCloud(10) # "empty" point cloud
a = np.asarray(p) # NumPy view on the cloud
a[:] = 0 # fill with zeros
print(p[3]) # prints (0.0, 0.0, 0.0)
a[:, 0] = 1 # set x coordinates to 1
print(p[3]) # prints (1.0, 0.0, 0.0)