
纵观全网pcl python版本配置存在各种各样的问题,基本没有一个文章可以完整搞定。直到今日,断断续续我也耗费数月终于打通整个流程,并且实现了windows和ubuntu2个系统安装和测试,先上一个结果图

其中windows测试成功环境为:
windows 10
VS2019专业版
PCL1.11.1
Anaconda3
python=3.6或者python3.7
安装流程:
第一步:安装VS2019和PCL1.11.1,由于安装过程简单我们省略
第二步:安装Anaconda3,我们仅仅需要anaconda3环境即可
第三步:打开我们的软件(注意必须要以管理员身份运行)

选择anaconda3的安装目录和PCL安装目录,点击开始配置,稍等4分钟左右,即可自动完成所有配置任务。
测试:我们打开anaconda3环境,并切换到pcl虚拟环境
conda activate pcl
然后我们一个读取pcd的代码测试一下,注意此代码是官网提供的代码
# -*- coding: utf-8 -*- # Point cloud library import pcl import pcl.pcl_visualization
# Opencv # import opencv import cv2
def main(): # These are track bar initial settings adjusted to the given pointcloud to make it completely visible. # Need to be adjusted depending on the pointcloud and its xyz limits if used with new pointclouds. # int a = 22; # int b = 12; # int c= 10; a = 22 b = 12 c = 10
# PCL Visualizer to view the pointcloud # pcl::visualization::PCLVisualizer viewer ("Simple visualizing window"); viewer = pcl.pcl_visualization.PCLVisualizering()
# int main (int argc, char** argv) # { # pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); # pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZRGBA>); # if (pcl::io::loadPLYFile<pcl::PointXYZRGBA> (argv[1], *cloud) == -1) //* load the ply file from command line # { # PCL_ERROR ("Couldn't load the file\n"); # return (-1); # } cloud = pcl.load("rabbit.pcd") #cloud = pcl.load("Tile_173078_LD_010_017_L22.obj")
# pcl::copyPointCloud( *cloud,*cloud_filtered); # cloud_filtered = cloud.copyPointCloud() cloud_filtered = cloud
# float i # float j # float k
# cv::namedWindow("picture"); # // Creating trackbars uisng opencv to control the pcl filter limits # cvCreateTrackbar("X_limit", "picture", &a, 30, NULL); # cvCreateTrackbar("Y_limit", "picture", &b, 30, NULL); # cvCreateTrackbar("Z_limit", "picture", &c, 30, NULL); # cv2.CreateTrackbar("X_limit", "picture", a, 30) # cv2.CreateTrackbar("Y_limit", "picture", b, 30) # cv2.CreateTrackbar("Z_limit", "picture", c, 30)
# // Starting the while loop where we continually filter with limits using trackbars and display pointcloud # char last_c = 0; last_c = 0
# while(true && (last_c != 27)) while last_c != 27:
# pcl::copyPointCloud(*cloud_filtered, *cloud); # // i,j,k Need to be adjusted depending on the pointcloud and its xyz limits if used with new pointclouds. i = 0.1 * a j = 0.1 * b k = 0.1 * c
# Printing to ensure that the passthrough filter values are changing if we move trackbars. # cout << "i = " << i << " j = " << j << " k = " << k << endl; print("i = " + str(i) + " j = " + str(j) + " k = " + str(k))
# Applying passthrough filters with XYZ limits # pcl::PassThrough<pcl::PointXYZRGBA> pass; # pass.setInputCloud (cloud); # pass.setFilterFieldName ("y"); # // pass.setFilterLimits (-0.1, 0.1); # pass.setFilterLimits (-k, k); # pass.filter (*cloud); pass_th = cloud.make_passthrough_filter() pass_th.set_filter_field_name("y") pass_th.set_filter_limits(-k, k) cloud = pass_th.filter()
# pass.setInputCloud (cloud); # pass.setFilterFieldName ("x"); # // pass.setFilterLimits (-0.1, 0.1); # pass.setFilterLimits (-j, j); # pass.filter (*cloud); # pass_th.setInputCloud(cloud) pass_th.set_filter_field_name("x") pass_th.set_filter_limits(-j, j) cloud = pass_th.filter()
# pass.setInputCloud (cloud); # pass.setFilterFieldName ("z"); # // pass.setFilterLimits (-10, 10); # pass.setFilterLimits (-i, i); # pass.filter (*cloud); # pass_th.setInputCloud(cloud) pass_th.set_filter_field_name("z") pass_th.set_filter_limits(-10, 10) cloud = pass_th.filter()
# // Visualizing pointcloud # viewer.addPointCloud (cloud, "scene_cloud"); # viewer.spinOnce(); # viewer.removePointCloud("scene_cloud"); viewer.AddPointCloud(cloud, b'scene_cloud', 0) viewer.SpinOnce() # viewer.Spin() viewer.RemovePointCloud(b'scene_cloud', 0)
if __name__ == "__main__": # import cProfile # cProfile.run('main()', sort='time') main() 以上代码我们保存test.py
执行python test.py即可正常显示结果,即就是上面的图片。
此外我们尝试了ubuntu18.04安装python-pcl和上面达到一样的效果。