第一个PCL程序学习--直接在MS2010下编译

来源:互联网 发布:好吃的火锅 知乎 编辑:程序博客网 时间:2024/06/15 11:35

一直想学习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 datacloud->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 objectPassThrough<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;}
官网代码没有改动。下面就是主要编译需要做的事了:
1、添加环境变量:新建了PCL_INCLUDE_DIRS --》 C:\Program Files\PCL 1.5.1\include\pcl-1.5

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范围内,所以都过滤掉了)


原创粉丝点击