Инфра-изображение Kinect не отображается — почему?

Я установил openni2.2, nite2.2 и kinect SDK 1.6 вместе с библиотекой Simpleopenni для обработки. Все работает нормально, кроме инфракрасного изображения - его просто нет. Это действительно странно, так как в то же время я могу четко видеть изображение глубины (а для изображения глубины, по логике вещей, нужны инфракрасная камера и проектор). Я так понимаю проблема в драйверах или софте? Я хотел бы использовать kinect в качестве инфракрасной камеры. Пожалуйста, помогите, ниже я прикрепляю свой тестовый код:

/* --------------------------------------------------------------------------
 * SimpleOpenNI IR Test
 * --------------------------------------------------------------------------
 * Processing Wrapper for the OpenNI/Kinect library
 * http://code.google.com/p/simple-openni
 * --------------------------------------------------------------------------
 * prog:  Max Rheiner / Interaction Design / zhdk / http://iad.zhdk.ch/
 * date:  02/16/2011 (m/d/y)
 * ----------------------------------------------------------------------------
 */

import SimpleOpenNI.*;


SimpleOpenNI  context;

void setup()
{
  context = new SimpleOpenNI(this);

  // enable depthMap generation 
  if(context.enableDepth() == false)
  {
     println("Can't open the depthMap, maybe the camera is not connected!"); 
     exit();
     return;
  }

  // enable ir generation
  if(context.enableIR() == false)
  {
     println("Can't open the depthMap, maybe the camera is not connected!"); 
     exit();
     return;
  }

  background(200,0,0);
  size(context.depthWidth() + context.irWidth() + 10, context.depthHeight()); 
}

void draw()
{
  // update the cam
  context.update();

  // draw depthImageMap
  image(context.depthImage(),0,0);

  // draw irImageMap
  image(context.irImage(),context.depthWidth() + 10,0);
}

person doku    schedule 14.02.2014    source источник
comment
изображение, показывающее ошибку: i.imgur.com/jzdqbXN.jpg?1   -  person doku    schedule 15.02.2014


Ответы (4)


Это делает работу:

context.enableIR(1,1,1);
person cunk111    schedule 18.04.2014
comment
Holey moley -> Он прав (почему -1?) Вот мой полный код, просто для справки: - person Sebastian Schmitz; 24.06.2014

У меня точно такая же проблема. Это не решение, но ближе всего к получению инфракрасного изображения с 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();
  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 );
  }

}
person Cronk99    schedule 11.03.2014
comment
Спасибо, но проблема в том, что я хочу видеть и отслеживать инфракрасный светодиод - светодиод виден как черный зазор в виде глубины, но как только я закрываю инфракрасный излучатель kinect, он исчезает... - person doku; 12.03.2014

Вы можете захватить инфракрасный поток, но просто не видите его?

Тогда проблема может быть RANGE (которая должна быть в [0, 255]).

У меня была эта проблема в Python и C++; Я решил это, разделив массив на диапазон (max-min), а затем умножив все записи на 255.

person carlos    schedule 04.06.2014

user3550091 прав! Для справки вот мой полный рабочий код (Processing+OpenNI):

import SimpleOpenNI.*;
SimpleOpenNI  context;
void setup(){
  size(640 * 2 + 10, 480);
  context = new SimpleOpenNI(this);
  if(context.isInit() == false){
     println("fail"); 
     exit();
     return;
  }
  context.enableDepth();

  // enable ir generation
  //context.enableIR(); old line 
  context.enableIR(1,1,1); //new line

  background(200,0,0);
}

void draw(){
  context.update();
  image(context.depthImage(),context.depthWidth() + 10,0);

  image(context.irImage(),0,0);
}
person Sebastian Schmitz    schedule 24.06.2014