Quantcast
Channel: Kinect - Processing 2.x and 3.x Forum
Viewing all articles
Browse latest Browse all 530

How to delay the feed of the Kinect 2 - Point Cloud

$
0
0

Hello Processing people!

I am encountering some difficulties with a processing sketch that I've been working on: I am trying to make it so that when I move in front of my Kinect 2, I see myself move on the sketch a few seconds (or frames) later.

I managed to do it with the depthThreshold Image, but no luck with the Point Cloud as my code only works with PImage. I'm guessing the best way to do this would be to store the array of data from the depth map created by the Kinect and recalling (drawing it) it later (after 3 seconds for instance) therefore creating the required delay effect, but I'm having trouble figuring out which part of the data needs to be stored and how. Any help or advice would be really appreciated!

Thanks a lot.

(I've posted part of my code below, if that helps).

// Draw
void draw() {
  background(0);

  // Translate and rotate

  pushMatrix();
  translate(width/2, height/2, 50);
  rotateY(a);

    // We're just going to calculate and draw every 2nd pixel
    int skip = 2;

    // Get the raw depth as array of integers
    int[] depth = kinect2.getRawDepth();

    // Creating the point cloud from the raw depth data of the kinect 2
    stroke(255);
    beginShape(POINTS);
    for (int x = 0; x < kinect2.depthWidth; x+=skip) {
      for (int y = 0; y < kinect2.depthHeight; y+=skip) {
        int offset = x + y * kinect2.depthWidth;
        int d = depth[offset];
        //calculte the x, y, z camera position based on the depth information
        PVector point = depthToPointCloudPos(x, y, d);

        // only draw the part between minThresh & maxThresh
        if (d > minThresh && d < maxThresh){
        // Draw a point
        vertex(point.x, point.y, point.z);
        }
      }
    }
    endShape();

  popMatrix();
}

//calculte the xyz camera position based on the depth data
PVector depthToPointCloudPos(int x, int y, float depthValue) {
  PVector point = new PVector();
  point.z = (depthValue);// / (1.0f); // Convert from mm to meters
  point.x = (x - CameraParams.cx) * point.z / CameraParams.fx;
  point.y = (y - CameraParams.cy) * point.z / CameraParams.fy;
  return point;

}

Viewing all articles
Browse latest Browse all 530

Trending Articles