转载请注明出处:http://blog.csdn.net/lxk7280
首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn.net/lxk7280/article/details/38184355。将下载得到的文件放到对应的Processing的一个子目录后,就可以使用。
KinectOrbit库下的鼠标和键盘的操作方法:
1.右键拖拽:摄像机摇拍。
2.左键拖拽:绕对象旋转。
3.滚动:缩放操作。
4.P键保存。O键退出。再次执行程序后,会以上次保存的试点为開始,视点的參数储存在数据目录下的一个名为:“orbitSet_0.csv”的文件中,假设该文件被删除。则以默认值为開始。
先附上三张这次的效果图:
1.近距离视角
由于Kinect的深度范围和视野角度范围例如以下:
顏色與深度 | 1.2 ~ 3.6 公尺 |
骨架追蹤 | 1.2 ~ 3.6 公尺 |
視野角度 | 水平 57 度、垂直 43 度 |
我的部分身体在Kinect的深度摄像头所能拍摄到的范围之外,因此在图片中没有显示出来。
2.中等距离视角
非常明显能看到我背后的桌子和我的手臂在后面的大大的投影。
3.远距离视角
代码:
第一步:导入自己须要用到的三个库
import processing.opengl.*; import SimpleOpenNI.*; import kinectOrbit.*;第二步:定义对象myOrbit和kinect
KinectOrbit myOrbit; SimpleOpenNI kinect;第三步:初始化对象。启动深度摄像头
void setup(){ size(800,600,OPENGL); myOrbit = new KinectOrbit(this,0); kinect = new SimpleOpenNI(this); kinect.enableDepth(); }第四步:在3D渲染下,绘点云和视锥(即在屏幕上可见的3D区域。kinect视锥意思为kinect在空间中能够看到的区域。)
void draw(){ kinect.update(); background(0); myOrbit.pushOrbit(this); drawPointCloud(); kinect.drawCamFrustum(); myOrbit.popOrbit(this); }第五步:完毕绘点云函数
void drawPointCloud(){ int[] depthMap = kinect.depthMap(); int steps = 3; int index; PVector realWorldPoint; stroke(255); for(int y=0;y < kinect.depthHeight();y += steps){ for(int x=0;x < kinect.depthWidth();x += steps){ stroke(kinect.depthImage().get(x,y)); index = x + y * kinect.depthWidth(); if(depthMap[index] > 0){ realWorldPoint = kinect.depthMapRealWorld()[index]; point(realWorldPoint.x,realWorldPoint.y,realWorldPoint.z); } } } }
版权声明:本文博客原创文章。博客,未经同意,不得转载。