作者 主题: 基于Mac的Kinect + Processing 快速入门 [二]  (阅读 6295 次)

evan

  • Newbie
  • *
  • 帖子: 28
  • HTML5/JS @ Google Creative Lab
    • personal site
基于Mac的Kinect + Processing 快速入门 [二]
« 于: 十月 28, 2011, 06:13:13 上午 »
[一]在这里: http://www.hudo.it/index.php/topic,133.0.html

上一节讲到我们可以用 kinect.getRawDepth() 来获取一个代表depth map里所有像素的的数列。这节用一个比较简单的例子讲一下可以如何使用这些数据。
这里我们通过设定一个阈值,只侦测距离小于这个值的点。通过计算出这些点的中心位置,我们就可以实现一个粗糙的hand tracking.

首先在程序开头添加一些全局变量
程序代码
int dw = 640; //depth map的默认宽度
int dh = 480; //depth map的默认高度
int threshold = 700; //阈值,可以根据你的实际情况自己调整
int[] depth;  //一个数列,用来容纳获取的数据
PVector loc; //一个向量,用来代表track到的位置
PVector smoothedLoc; //这个向量用来使track点的移动更顺畅

然后在 draw() 里面:

程序代码

//这几个一会儿有用,用来计算中心点
int sumX = 0;
int sumY = 0;
int count = 0;

//用两个for loop走遍depth数列,一个横向一个竖向,这样可以知道当前像素的x, y位置
for (int x = 0; x < dw; x++) {
  for (int y = 0; y < dh; y++) {

    int pixelIndex = y*dw + x; //算出当前像素在数列里的位置。

    /* 这里需要注意的是,getVideoImage() 和 getDepthImage() 得到的图像都是镜像过的,但是 getRawDepth()得到的数据是没有镜像过的。*/

    int rawDepth = depth[pixelIndex]; //得到当前像素的深度,也就是该点离kinect有多远

    if (rawDepth < threshold) {
      //假如当前像素深度小于我们给定的值,那么我们就把它的x和y加进总和
      sumX += x;
      sumY += y;
      count++;
    }
  }
}

//把所有深度小于阈值的点的x和y的总和分别除以总数,就得到了它们的x和y的平均值,也就是中心点(centroid)的位置
if (count != 0) {
  loc = new PVector(sumX/count, sumY/count);
}

//用lerp()来使得track点的移动更顺畅
smoothedLoc.x = lerp(smoothedLoc.x, loc.x, 0.3f);
smoothedLoc.y = lerp(smoothedLoc.y, loc.y, 0.3f);

然后你可以利用smoothedLoc来画些东西:

程序代码
line(width/2, height/2, smoothedLoc.x, smoothedLoc.y);
ellipse(smoothedLoc.x, smoothedLoc.y, 20, 20);

这个例子基本上就是追踪一定距离以内有没有物体,然后算出距离以内所有点的中心点。
当然,这些数据还可以用来做别的事情。下一节会介绍一个Blob Detection的库,可以用来描绘距离内所有像素的轮廓和bounding box等等。
新浪微博@尤小右
twitter@youyuxi

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
Re: 基于Mac的Kinect + Processing 快速入门 [二]
« 回复 #1 于: 十月 28, 2011, 10:42:10 上午 »
great
加点示意图更好
否则没玩过的很难yy

evan

  • Newbie
  • *
  • 帖子: 28
  • HTML5/JS @ Google Creative Lab
    • personal site
Re: 基于Mac的Kinect + Processing 快速入门 [二]
« 回复 #2 于: 十月 28, 2011, 11:03:50 上午 »
great
加点示意图更好
否则没玩过的很难yy
恩 有空慢慢完善
新浪微博@尤小右
twitter@youyuxi

Tags: