一直想学习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;
}
官网代码没有改动。下面就是主要编译需要做的事了:
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范围内,所以都过滤掉了)