转载请注明出处: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.近距离视角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHhrNzI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
由于Kinect的深度范围和视野角度范围例如以下:
顏色與深度 | 1.2 ~ 3.6 公尺 |
骨架追蹤 | 1.2 ~ 3.6 公尺 |
視野角度 | 水平 57 度、垂直 43 度 |
我的部分身体在Kinect的深度摄像头所能拍摄到的范围之外,因此在图片中没有显示出来。
2.中等距离视角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHhrNzI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
非常明显能看到我背后的桌子和我的手臂在后面的大大的投影。
3.远距离视角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHhrNzI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
代码:
第一步:导入自己须要用到的三个库
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);
}
}
}
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。