转载请注明出处: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.近距离视角
Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标

由于Kinect的深度范围和视野角度范围例如以下:

顏色與深度 1.2 ~ 3.6 公尺
骨架追蹤 1.2 ~ 3.6 公尺
視野角度 水平 57 度、垂直 43 度
我的部分身体在Kinect的深度摄像头所能拍摄到的范围之外,因此在图片中没有显示出来。

2.中等距离视角
Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标
非常明显能看到我背后的桌子和我的手臂在后面的大大的投影。

3.远距离视角
Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标



代码:
第一步:导入自己须要用到的三个库

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);
      }
    }
  } 
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。