我想在处理中做一个简单的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);
}
答案 0 :(得分: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 article中看到一些方便的SimpleOpenNI样本,这是我去年举办的研讨会的一部分。