一直想学习PCL点云库,然后在此基础上做些关于Kinect的研究。今天终于可以慢慢琢磨了。
本次学习是根据官方的Tutorial进行的,只是编译是直接用MS2010进行的,没有弄CMake的文件。PCL Demo官网Tutorial
PS:习惯了添加库添加路径的方式了
#include <iostream> #include <pcl/filters/passthrough.h> #include <pcl/point_types.h> using namespace pcl; int main() { PointCloud<PointXYZ>::Ptr cloud(new PointCloud<PointXYZ>); PointCloud<PointXYZ>::Ptr cloud_filter(new PointCloud<PointXYZ>); // Fill in the cloud data cloud->width = 5; cloud->height = 1; cloud->points.resize(cloud->width * cloud->height); for (size_t i = 0; i < cloud->points.size(); ++i) { cloud->points[i].x = 1024*rand() / (RAND_MAX+1.0f); cloud->points[i].y = 1024*rand() / (RAND_MAX+1.0f); cloud->points[i].z = 1024*rand() / (RAND_MAX+1.0f); } std::cerr << "Cloud before filtering: " << std::endl; for (size_t i = 0; i < cloud->points.size(); ++i) std::cerr << "x: " << cloud->points[i].x << "\ty: " << cloud->points[i].y << "\tz: " << cloud->points[i].z << std::endl; // Create the filtering object PassThrough<PointXYZ> pass; pass.setInputCloud(cloud); pass.setFilterFieldName("z"); pass.setFilterLimits(0.0, 1.0); pass.filter(*cloud_filter); std::cerr << "Cloud after filtering: " << std::endl; for (size_t i = 0; i < cloud_filter->points.size(); ++i) std::cerr << "x: " << cloud_filter->points[i].x << "\ty: " << cloud_filter->points[i].y << "\tz: " << cloud_filter->points[i].z << std::endl; return 0; }官网代码没有改动。下面就是主要编译需要做的事了:
PCL_BOOST --》C:\Program Files\PCL 1.5.1\3rdParty\Boost\include
及 PCL_EIGENC --》C:\Program Files\PCL 1.5.1\3rdParty\Eigen\include
PCL_FLANN --》C:\Program Files\PCL 1.5.1\3rdParty\Flann\include
PCL_OPENNI --》C:\Program Files\OpenNI\Include 【因OPENNI以前就装了,为方便添加了此变量】
PCL_QHULL --》C:\Program Files\PCL 1.5.1\3rdParty\Qhull\include
PCL_VTK --》C:\Program Files\PCL 1.5.1\3rdParty\VTK\include
在将这些include路径放到变量“include”时没起作用,就用这种比较2的方法了,在工程编译时,只要出现哪个头文件打不开就添加$(***)到项目“附加包含目录”中
像本示例就添加了PCL_INCLUDE_DIRS PCL_BOOST PCL_EIGENC (之所以包含后两个主要是因为引用的pcl自己头文件中引用这些)
2、添加引用库:再在环境变量中添加PCL_LIB_DIRS --》C:\Program Files\PCL 1.5.1\lib
在项目属性-链接器-常规-附加库目录中添加$(PCL_LIB_DIRS)
同时本次示例用到的lib有(须添加到输入-附加依赖项中)pcl_common_debug.lib pcl_filters_debug.lib 第一个应该是有关PCL项目必须的,第二个应该是本示例所需要的
OK!该添加的都添加完了,可以编译了。当然还需在环境变量中编辑“path”,添加C:\Program Files\PCL 1.5.1\bin也可将lib相关的dll拷贝到了项目文件目录下 。
我想下次不同的例子,只要根据相关编译出错的提示,添加相应的PCL_** 以及相关lib就能够直接用MS2010编译了。
嘿嘿,最后给个程序运行图(不过貌似不像官方给的结果有些小不同,关键是所有z值都不在0.0-1.0范围内,所以都过滤掉了)