1

Processing では、SimpleOpenNI を使用して 2 つの Kinect から深度マップを正常に描画できますが、現在、(enableScene() と enableDepth() から) 2 つの「シーン」を描画しようとしています。両方の Kinect が検出されますが、出力を描画すると、同じシーンが 2 回描画されます (enableDepth() を使用すると、常に 2 つの異なる深度画像が得られます)。私が間違っていることはありますか?前もって感謝します。

/* --------------------------------------------------------------------------
 * SimpleOpenNI Multi Camera Test
 * --------------------------------------------------------------------------
 */

import SimpleOpenNI.*;

SimpleOpenNI cam1;
SimpleOpenNI cam2;

void setup()
{
  size(640 * 2 + 10,480); 

  // start OpenNI, loads the library
  SimpleOpenNI.start();

  // init the cameras
  cam1 = new SimpleOpenNI(0,this);
  cam2 = new SimpleOpenNI(1,this);

  // set the camera generators ** HAD TO REVERSE ORDER FOR BOTH KINECTS TO WORK

  // enable Scene
  if(cam2.enableScene() == false)
  {
     println("Can't open the scene for Camera 2"); 
     exit();
     return;
  }

  // enable depthMap generation 
  if(cam1.enableScene() == false)
  {
     println("Can't open the scene for Camera 1"); 
     exit();
     return;
  }

  background(10,200,20);
}

void draw()
{
  // update the cams
  SimpleOpenNI.updateAll();

  image(cam1.sceneImage(),0,0);

  image(cam2.sceneImage(),640 + 10,0);
}
4

1 に答える 1

1

この機能を使用して別のテキストを作成しましたsceneMap()が、SimpleOpenNI が内部で適切に更新されないという問題が実際にあるようです。

/* --------------------------------------------------------------------------
 * SimpleOpenNI Multi Camera Test
 * --------------------------------------------------------------------------
 */

import SimpleOpenNI.*;

SimpleOpenNI cam1;
SimpleOpenNI cam2;

int numPixels = 640*480;
int[] sceneM1 = new int[numPixels];
int[] sceneM2 = new int[numPixels];
PImage scene1,scene2;

void setup()
{
  size(640 * 2 + 10,480 * 2 + 10); 

  // start OpenNI, loads the library
  SimpleOpenNI.start();

  // init the cameras
  cam1 = new SimpleOpenNI(0,this);
  cam2 = new SimpleOpenNI(1,this);

  // set the camera generators ** HAD TO REVERSE ORDER FOR BOTH KINECTS TO WORK

  // enable Scene
  if(cam2.enableScene() == false)
  {
     println("Can't open the scene for Camera 2"); 
     exit();
     return;
  }
//  cam2.enableDepth();//this fails when using only 1 bus

  // enable depthMap generation 
  if(cam1.enableScene() == false)
  {
     println("Can't open the scene for Camera 1"); 
     exit();
     return;
  }
  cam1.enableDepth();

  scene1 = createImage(640,480,RGB);
  scene2 = createImage(640,480,RGB);

  background(10,200,20);
}

void draw()
{
  // update the cams
  SimpleOpenNI.updateAll();

  image(cam1.depthImage(),0,0);
  image(cam1.sceneImage(),0,0);

  cam1.sceneMap(sceneM1);
  cam2.sceneMap(sceneM2);
  updateSceneImage(sceneM1,scene1);
  updateSceneImage(sceneM2,scene2);
  image(scene1,0,490);
  image(scene2,650,490);
}
void updateSceneImage(int[] sceneMap,PImage sceneImage){
  for(int i = 0; i < numPixels; i++) sceneImage.pixels[i] = sceneMap[i] * 255;
  sceneImage.updatePixels();
}

のようなものを使用して

cam1.update();
cam2.update();

それよりも

SimpleOpenNI.updateAll();

何も変わりません。

問題が報告されました。解決されることを願っています。それまでの間、別の言語/フレームワークで OpenNI を使用してみてください。OpenFrameworks には、Processing と多くの類似点があります (正直なところ、多くの相違点もありますが、ロケット科学ではありません)。実験的なofxOpenNI アドオンを試して、複数のカメラをテストしてください。問題が解決することを願っています。

于 2013-02-07T13:10:20.863 に答える