PCL介绍
Point Cloud Library (PCL) 是一个独立的大型的处理二维/三维图像和点云数据的开源工程。PCL在三维图像处理上的地位相当于opencv在二维图像处理的地位。
更多信息可查看PCL官网:http://pointclouds.org/
kinect介绍
Kinect是巨硬推出的一款体感外设。它可以帮助我们获取摄像头范围内的深度数据和彩色数据。
安装
对于kinect 1.0版本,推荐使用SensorKinect开源驱动。
对于kinect 2.0版本,不存在开源驱动,请使用Kinect SDK for Windows。
这里使用Kinect SDK for Windows 2.0(以下简称sdk)。
安装sdk
https://dev.windows.com/en-us/kinect
安装PCL
推荐从源代码安装:1
$ git clone https://github.com/PointCloudLibrary/pcl
使用cmake针对所在的平台进行编译。
由于windows平台解决Library问题较为麻烦,也可以使用 All in one Installer。
下载KinectGrabber
sdk本身提供了丰富的API,便于开发者实现各种功能。如手势识别、骨骼识别等。我们在这里仅使用它的基础功能——读取深度数据,并转换为我们需要的点云。
使用
使用Kinect2Grabber
修改Sample.cpp,将扫描的点云保存为PCD文件,以便于后续处理:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#include "stdafx.h"
// Disable Error C4996 that occur when using Boost.Signals2.
#ifdef _DEBUG
#define _SCL_SECURE_NO_WARNINGS
#endif
#include "kinect2_grabber.h"
#include <pcl/visualization/cloud_viewer.h>
int _tmain( int argc, _TCHAR* argv[] )
{
// Create Cloud Viewer
pcl::visualization::CloudViewer viewer( "Point Cloud Viewer" );
// Callback Function to be called when Updating Data
boost::function<void( const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr& )> function =
[&viewer]( const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud ){
if( !viewer.wasStopped() ){
viewer.showCloud( cloud );
}
};
// Create Kinect2Grabber
pcl::Grabber* grabber = new pcl::Kinect2Grabber();
// Regist Callback Function
grabber->registerCallback( function );
// Start Retrieve Data
grabber->start();
while( !viewer.wasStopped() ){
// Input Key ( Exit ESC key )
if( GetKeyState( VK_ESCAPE ) < 0 ){
break;
}
}
// Stop Retrieve Data
grabber->stop();
return 0;
}
预览效果
PCL自带的pcl_viewer工具可以帮助我们查看pcd文件。1
$ pcl_viewer result.pcd
拍摄的单侧点云效果如下: