2012-03-06 5 views
0

Я пытаюсь использовать обработку, чтобы получить облако точек. Но получается, что он не работаетsimpleopenni point cloud program with Kinect

import SimpleOpenNI.*; 

import processing.opengl.*; 

SimpleOpenNI kinect; 

void setup() 
{ 

    size(1024, 768, OPENGL); 

    kinect = new SimpleOpenNI(this); 

    kinect.enableDepth(); 

} 

void draw() 
{ 

    background(0); 

    kinect.update(); 

    translate(width/2, height/2, -1000); 

    rotateX(radians(180)); 

stroke(255); 

    PVector[] depthPoints = kinect.depthMapRealWorld(); 

    //the program get stucked in the for loop it loops 307200 times and I don't have any points output 

    for(int i = 0; i < depthPoints.length ; i++) 
    { 

    PVector currentPoint = depthPoints[i]; 

    point(currentPoint.x, currentPoint.y, currentPoint.z); 
    } 

} 
+0

ошибок нет, я могу получить точки, если я пропущу 500 пикселей (которые слишком сильно пропускаются). Первый пункт тоже работает. – xinghua

ответ

1

Ваш код, если он тонкий, только что протестирован. Он пеет 307200 раз, потому что он преобразует данные из изображения глубины (640x480 = 307200) в 3D-позиции.

Уверены, что у вас нет ошибок? Кроме того, рисование всех точек в обработке немного медленное, вы можете пропустить несколько. И как тест, попробуйте распечатать на 1-й точки и посмотреть, если значение изменяется на всех (она должна) или если глубина изображения имеет какие-либо данные (не черный/заполнено нулями):

import SimpleOpenNI.*; 

import processing.opengl.*; 

SimpleOpenNI kinect; 

void setup() 
{ 

    size(1024, 768, OPENGL); 

    kinect = new SimpleOpenNI(this); 

    kinect.enableDepth(); 

} 

void draw() 
{ 

    background(0); 

    kinect.update(); 
    image(kinect.depthImage(),0,0,160,120);//check depth image 

    translate(width/2, height/2, -1000); 

    rotateX(radians(180)); 

    stroke(255); 

    PVector[] depthPoints = kinect.depthMapRealWorld(); 

    //the program get stucked in the for loop it loops 307200 times and I don't have any points output 

    for(int i = 0; i < depthPoints.length ; i+=4)//draw point for every 4th pixel 
    { 

    PVector currentPoint = depthPoints[i]; 
    if(i == 0) println(currentPoint); 
    point(currentPoint.x, currentPoint.y, currentPoint.z); 
    } 

} 
+0

ошибок нет, я могу получить точки, если я пропущу 500 пикселей (которые слишком сильно пропускаются). Первый пункт тоже работает. – xinghua

+0

@xinghua Это странно. Изображение глубины выглядит нормально (оттенки серого, а не обрезанные/черные/и т. Д.)? Кроме того, можете ли вы успешно запустить образец DepthMap3d, который поставляется с SimpleOpenNI? –

+0

, поскольку я сказал, что это слишком медленно для отображения. Тот, который у меня есть, имеет плохие качества, вы можете увидеть кучу очков в линиях, если вы пропустите много очков. Однако образец оказывается идеальным. – xinghua