PCL两种安装方式,选对教程很重要。
PCL1.8两种安装方式:
①需要用PCL来使用kinectFusion,那么先需要自己配置第三方库,再用Cmake编译pcl1.8源码(1.8源码在github去下载),
(1)假如你想自己一步步编译第三方库,可以参考http://blog.csdn.net/yzheately/article/details/50938322,安装比较费时,但是会比较有收获。也可以看这个http://blog.csdn.net/alan_1550587588/article/details/54582192。
(2)不用(1)的方法,安装第三方库省事一点:第三方库直接用pcl官网http://www.pointclouds.org/downloads/windows.html推荐的配置,
例如windows10-x64,vs2010就下载最右边列的。
安装第三方库注意点:①必须先安装vs2010,再装其他的②cuda安装要对应自己显卡的计算能力,去官网下载安装③安装官网中的其他第三方库时,openni很容易出错,要点如下:
想用openi获取Kinect的数据则首先不能安装Kinect官方的SDK,否则SDK会屏蔽openni的驱动,之前安装的话就卸掉。另win8、win10的同学需要先设置一下电脑(win7不需要),否则在安装SensorKinect093-Bin-Win32-v5.1.2.1.msi驱动时系统会提示“文件的哈希值不在指定的目录文件中。此文件可能已损坏”的警告导致驱动安装失败。Win10的设置方法为点击左下角->设置->更新和安全->恢复->立刻重启(等一小会)->疑难解答->高级选项(之后重启)->启动设置->禁用驱动程序强制签名(倒数第三个,对应哪个数字就在键盘按几)->重启之后就可以了。查看openni是否成功,可以参考http://blog.csdn.net/alan_1550587588/article/details/54582192,里面的opencv代码查看深度彩色图,,可以的话就是配置openni成功了:
- #include "stdafx.h"
- #include <stdlib.h>
- #include <iostream>
- #include <string>
- #include <XnCppWrapper.h>
- #include "opencv/cv.h"
- #include "opencv/highgui.h"
-
- using namespace std;
- using namespace cv;
-
- void CheckOpenNIError( XnStatus result, string status )
- {
- if( result != XN_STATUS_OK )
- cerr << status << " Error: " << xnGetStatusString( result ) << endl;
- }
-
- int main( int argc, char** argv )
- {
- XnStatus result = XN_STATUS_OK;
- xn::DepthMetaData depthMD;
- xn::ImageMetaData imageMD;
-
-
- IplImage* imgDepth16u=cvCreateImage(cvSize(640,480),IPL_DEPTH_16U,1);
- IplImage* imgRGB8u=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
- IplImage* depthShow=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
- IplImage* imageShow=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
- cvNamedWindow("depth",1);
- cvNamedWindow("image",1);
- char key=0;
- xn::Context context;
- result = context.Init();
- CheckOpenNIError( result, "initialize context" );
-
- xn::DepthGenerator depthGenerator;
- result = depthGenerator.Create( context );
- CheckOpenNIError( result, "Create depth generator" );
- xn::ImageGenerator imageGenerator;
- result = imageGenerator.Create( context );
- CheckOpenNIError( result, "Create image generator" );
-
- XnMapOutputMode mapMode;
- mapMode.nXRes = 640;
- mapMode.nYRes = 480;
- mapMode.nFPS = 30;
- result = depthGenerator.SetMapOutputMode( mapMode );
- result = imageGenerator.SetMapOutputMode( mapMode );
-
- depthGenerator.GetAlternativeViewPointCap().SetViewPoint( imageGenerator );
-
- result = context.StartGeneratingAll();
- result = context.WaitNoneUpdateAll();
-
- while( (key!=27) && !(result = context.WaitNoneUpdateAll( )) )
- {
-
- depthGenerator.GetMetaData(depthMD);
- imageGenerator.GetMetaData(imageMD);
-
- memcpy(imgDepth16u->imageData,depthMD.Data(),640*480*2);
- cvConvertScale(imgDepth16u,depthShow,255/4096.0,0);
- memcpy(imgRGB8u->imageData,imageMD.Data(),640*480*3);
- cvCvtColor(imgRGB8u,imageShow,CV_RGB2BGR);
- cvShowImage("depth", depthShow);
- cvShowImage("image",imageShow);
- key=cvWaitKey(20);
- }
- cvDestroyWindow("depth");
- cvDestroyWindow("image");
- cvReleaseImage(&imgDepth16u);
- cvReleaseImage(&imgRGB8u);
- cvReleaseImage(&depthShow);
- cvReleaseImage(&imageShow);
- context.StopGeneratingAll();
- context.Shutdown();
- return 0;
- }
分别安装好第三方库,然后参照http://blog.csdn.net/yzheately/article/details/50938322里面cmake PCL1.8的步骤再进行cmake编译pcl1.8源码,然后build kinfu-largeScale等运行kinfu拍摄
②不需要使用kinect1,只需要用PCL来处理一些点云的算法(不需要使用kinect设备来获取点云),可以用all-in-one快速安装PCL:
http://www.zhangzscn.com/2016/03/02/pcl1-8-0%EF%BC%8Cvs2013%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B%E3%80%82/ 安装简单快速!
安装好PCL后,动手实践练习很重要,小练习可以看我博客其他PCL方面内容,或者英语官网去看教程。
参考1:http://blog.csdn.net/yzheately/article/details/50938322
参考2:http://www.zhangzscn.com/2016/03/02/pcl1-8-0,vs2013配置教程。/
参考3:http://blog.csdn.net/alan_1550587588/article/details/54582192