点云数据处理 环境安装 Python-PCL (windows + python 3.6)
1. 安装PCL
1.1 下载PCL(官方资源下载)
https://github.com/PointCloudLibrary/pcl/releases?spm=a2c6h.12873639.article-detail.7.2dcf537aK5hO1K
网盘里是我下载好的两个文件 :https://pan.baidu.com/s/1mC3Ub9BxKZK8ZEoLP4SVWg(提取码: fge7 )
下载AllInOne和pdb
1.2 安装PCL AllInOne
“下一步”
“我接受”
选择不添加PATH,等会手动添加(自动添加容易报错),“下一步”
选择安装目录,“下一步”
1.3 安装OpenNI
进入PCL安装目录(XXX:\PCL 1.14.1\3rdParty\OpenNI2),如果只有OpenNI-Windows-x64-2.2.msi,则需要重新安装OpenNI。
打开msi文件,“Next”
“Remove”,“Next”,卸载OpenNI
“Remove”
删除之后,重新打开msi文件,将OpenNI安装到XXX:\PCL 1.14.1\3rdParty\OpenNI2目录中。
1.4 修改环境变量
此电脑(右键)-属性-高级系统设置-高级-环境变量
按照PCL的安装目录添加变量(此电脑安装在D盘,根据自己安装的位置添加PATH)
D:\PCL 1.14.1\bin
D:\PCL 1.14.1\3rdParty\VTK\bin
D:\PCL 1.14.1\3rdParty\Qhull\bin
D:\PCL 1.14.1\3rdParty\OpenNI2\Tools
D:\PCL 1.14.1\3rdParty\FLANN\bin
D:\PCL 1.14.1\3rdParty\OpenNI2\Include
D:\PCL 1.14.1\3rdParty\OpenNI2\Lib
D:\PCL 1.14.1\3rdParty\OpenNI2\Redist
1.5 添加PCL的debug文件
解压下载的pcl的pdb.zip,将pdb文件复制到pcl 1.14.1\bin目录下
2. 安装python上的PCL(因为Python-PCL比较老,所以python版本选择3.6,这里使用anaconda3的python)
2.1 安装anaconda3
此处教程可参考其他博主的安装教程
https://blog.csdn.net/m0_61010858/article/details/130578110
2.2 创建虚拟环境(不需要考虑python版本冲突的可以省略)
可以在anaconda navigator的environment中创建虚拟环境
也可以在anaconda prompt中进行创建(这里需要添加镜像源,升级conda等操作,可以参考博文:https://blog.51cto.com/u_16213679/10575454)
创建名为python-pcl-test的虚拟环境
conda create -n python_pcl_test python=3.6
查看创建的虚拟环境,出现python_pcl_test
conda env list
激活虚拟环境
activate python_pcl_test #激活环境
deactivate python_pcl_test #退出环境
2.3 安装python-pcl
下载wheel文件(也可以选择自己编译,会比较麻烦。这里直接用别人编译好的whl文件)
网盘链接: https://pan.baidu.com/s/1mC3Ub9BxKZK8ZEoLP4SVWg(提取码: fge7 )
激活虚拟环境(如果没有,则忽略)
pip安装whl文件(自行更改whl的位置)
pip install D:\python_pcl\python_pcl-0.3.1-cp36-cp36m-win_amd64.whl
3. 测试
下载测试用pcd文件 bunny.pcd
https://pan.baidu.com/s/1mC3Ub9BxKZK8ZEoLP4SVWg(提取码: fge7 )
测试代码
import pcl
import pcl.pcl_visualization
def main():
# 读取 bunny.pcd
cloud = pcl.load('bunny.pcd')
# 创建可视化对象
viewer = pcl.pcl_visualization.CloudViewing()
# 显示点云PointXYZ格式
viewer.ShowMonochromeCloud(cloud, b'cloud')
flag = True
while flag:
flag = not (viewer.WasStopped())
if __name__ == "__main__":
main()
结果
4. 结束
文中的结果皆为本人实践操作结果,确认可行。然而,由于计算机环境不同,可能出现无法完全复现的情况,请自行查阅其他博主教程。本人参考了众多博文和官方教程,收益良多,在此表示感谢,欢迎各位批评指正。
作者:天上掉下一只狗