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

这完成了这项工作:

context.enableIR(1,1,1);

我有完全相同的问题。这不是一个解决方案,但我最接近从 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 );
  }
}

您是否能够捕获红外流,但您就是看不到它?

那么问题可能是RANGE(它应该在 [0, 255] 中)。

我在 Python 和 C++ 中遇到了这个问题;我通过将数组除以范围(最大-最小值)然后将所有条目乘以 255 来解决它。

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

最新更新