Processing 使用Kinect的SimplePenni点云程序

Processing 使用Kinect的SimplePenni点云程序,processing,kinect,point-clouds,Processing,Kinect,Point Clouds,我正在尝试使用处理来获取点云。但事实证明,这是行不通的 导入SimplePenni.*; 导入处理; simplepenni-kinect; 无效设置() { 大小(1024768,OPENGL); kinect=新的SimplePenni(本); kinect.enableDepth(); } 作废提款() { 背景(0); kinect.update(); 平移(宽度/2,高度/2,-1000); 旋转度(弧度(180)); 中风(255); PVector[]depthPoints=kin

我正在尝试使用处理来获取点云。但事实证明,这是行不通的

导入SimplePenni.*;
导入处理;
simplepenni-kinect;
无效设置()
{
大小(1024768,OPENGL);
kinect=新的SimplePenni(本);
kinect.enableDepth();
}
作废提款()
{
背景(0);
kinect.update();
平移(宽度/2,高度/2,-1000);
旋转度(弧度(180));
中风(255);
PVector[]depthPoints=kinect.depthMapRealWorld();
//程序在for循环中被卡住了,它循环307200次,我没有任何点输出
对于(int i=0;i
您的代码如果没有问题,就测试一下。 它循环307200次,因为它将深度图像(640x480=307200)中的数据转换为三维位置

你确定没有收到任何错误吗? 此外,绘制处理中的所有点有点慢,您可能希望跳过一些。 作为测试,试着打印出第一个点,看看值是否有任何变化(应该) 或者,如果深度图像有任何数据(不是黑色/填充有零):

导入SimplePenni.*;
导入处理;
simplepenni-kinect;
无效设置()
{
大小(1024768,OPENGL);
kinect=新的SimplePenni(本);
kinect.enableDepth();
}
作废提款()
{
背景(0);
kinect.update();
图像(kinect.depthImage(),0,0160120);//检查深度图像
平移(宽度/2,高度/2,-1000);
旋转度(弧度(180));
中风(255);
PVector[]depthPoints=kinect.depthMapRealWorld();
//程序在for循环中被卡住了,它循环307200次,我没有任何点输出
对于(int i=0;i
没有错误,如果跳过500像素(结果是跳过太多),我可以得到分数。第一个点也正常工作。没有错误,如果跳过500像素(结果跳过太多),我可以得到这些点。第一点也行。@兴华,这很奇怪。深度图像是否正常(灰度、未剪裁/黑色等)?另外,您能否成功运行SimplePenni附带的DepthMap3d示例?正如我所说,它太慢,无法显示。我得到的一个质量很差,如果你跳过很多点,你可以看到一行中有很多点。然而,这个例子是完美的。那么也许你的代码中有我遗漏的东西……和你发布的一样吗?因为你贴的东西在我的机器上运行得很好。无论如何,如果样本运行正常,您可以将其保存为另一个草图,清理并从那里继续。好的,我将从那里开始,看看会发生什么。非常感谢你的帮助!
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 );
  }

}