0

処理を使用して点群を取得しようとしています。しかし、それはうまくいかないことがわかりました

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

}
4

1 に答える 1

1

コードが問題なければ、テスト済みです。深度画像 (640x480 = 307200) からのデータを 3D 位置に変換するため、307200 回ループします。

エラーが発生していませんか? また、Processing ですべてのポイントを描画するのは少し遅いので、いくつかスキップすることをお勧めします。そして、テストとして、最初のポイントを印刷して、値がまったく変化するかどうか (変更する必要があります)、または深度イメージにデータがあるかどうか (黒ではない/ゼロで埋められているか) を確認します。

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

}
于 2012-03-06T08:56:00.020 に答える