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

一直想学习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范围内,所以都过滤掉了)第一个PCL程序学习--直接在MS2010下编译_第1张图片


你可能感兴趣的:(第一个PCL程序学习--直接在MS2010下编译)