0

我想在处理中做一个简单的 kinect 应用,我只想在 kinect 检测到骨架时,显示一个简单的 jpeg 图像,仅此而已。我写了一些代码,一切正常,但是当有人出现在 kinect 面前时,什么也没有发生,谁能帮助我?这是我的代码:

import SimpleOpenNI.*;

SimpleOpenNI  kinect;

void setup()
{
  // Começar o evento
  kinect = new SimpleOpenNI(this);

  // Ativar o RGB 
  kinect.enableRGB();

  background(200,0,0);


  // Criar a janela do tamanho do dephMap
  size(kinect.rgbWidth(), kinect.rgbHeight()); 
}

void draw()
{
  // update da camera
  kinect.update();

  // mostrar o depthMap
  image(kinect.rgbImage(),0,0); 

  // Definir quantidade de pessoas
  int i;
  for (i=1; i<=10; i++)
  {
    // Verificar presença da pessoa
    if(kinect.isTrackingSkeleton(i))
    {
      mostrarImagem();  // draw the skeleton
    }
  }
}

// Mostrar a imagem
void mostrarImagem()
{  
 PImage img;
img = loadImage("proverbio1.jpg");
image(img, 0, 0); 
}
4

1 回答 1

1

您还没有为 OpenNI 用户事件设置回调。此外,如果您只是想在检测到某人时显示图像,则实际上不需要跟踪骨架:只需使用场景图像即可。您可以在不跟踪骨架的情况下获取有关用户位置的一些信息,例如用户的重心。如果您实际上不需要骨架数据,这样您将拥有一个更简单、更快的应用程序。

这是一个基本的例子:

import SimpleOpenNI.*;

SimpleOpenNI context;//OpenNI context
PVector pos = new PVector();//this will store the position of the user
int user;//this will keep track of the most recent user added
PImage sample; 

void setup(){
  size(640,480);
  context = new SimpleOpenNI(this);//initialize
  context.enableScene();//enable features we want to use
  context.enableUser(SimpleOpenNI.SKEL_PROFILE_NONE);//enable user events, but no skeleton tracking, needed for the CoM functionality
  sample = loadImage("proverbio1.jpg");
}
void draw(){
  context.update();//update openni
  image(context.sceneImage(),0,0);
  if(user > 0){//if we have a user
    context.getCoM(user,pos);//store that user's position
    println("user " + user + " is at: " + pos);//print it in the console
    image(sample,0,0);
  }
}
//OpenNI basic user events
void onNewUser(int userId){
  println("detected" + userId);
  user = userId;
}
void onLostUser(int userId){
  println("lost: " + userId);
  user = 0;
}

您可以在这篇Kinect 文章中看到一些方便的 SimpleOpenNI 示例,该文章是我去年举办的研讨会的一部分。

于 2013-06-26T15:45:52.423 回答