Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2016-12-06 19:55:27 Projet kinect avec processing

Maylu
nouveau membre
Date d'inscription: 2016-11-23
Messages: 3

Projet kinect avec processing



Bonjour,

voila j'ai un autre soucis, mon projet Kinect/Processing consiste à créer une interface gestuelle (interaction avec geste) avec une des images et des vidéos.

je souhaite parcourir mon image avec ma main mais je sais pas comment m'y prendre
de plus je voulais créer des petits points/ellipses sur mes images qui prennent la couleur du pixel selon leur coordonnées avec get() ex

https://processing.org/reference/get_.html

sauf que cela ne marche pas, j'ai une erreur qui m'indique que je ne peut pas utiliser get() dans un tableau PImage[]

voici mon code en programmation orientée objet:

import SimpleOpenNI.*;
SimpleOpenNI context;
Sensor sensor;
PImage[] paths = new PImage [3] ; //tableau qui référence des chaines de caracteres, chemins vers les videos
int image_id;

void setup () {
 
  size(640, 480);
  noStroke();
  background(0);
  smooth();

  context = new SimpleOpenNI(this);
  context.enableDepth(); //recuperer l'image de profondeur

  paths[0] = loadImage("v1.jpg");
  paths[1] = loadImage("v2.jpg");
  paths[2] = loadImage("v3.jpg");

  image_id = 0;
  sensor = new Sensor();
}

void changeImage(int id) {
  image_id = id;

}

void draw () {
  sensor.update();
  sensor.displayInfos();

  // Pour verifier que ça marche, lignes à supprimer ensuite !!!
  tint(255, 0); //modifier la couleur des images affichées après ses lignes de codes
  image(context.depthImage(), 0, 0); //afficher l'image de la kinect
  sensor.displayClosestPoint();
  tint(255, 255);
  noStroke();
  fill(0, 50);
  rect(0, 0, width, height);
  /* for (int a = 0; a < 30; a++) {
    //float value = 25;
    float pointillize = map(mouseX, 0, width, 200, 10);
    int rx = int(random(myMovie.width));
    int ry = int(random(myMovie.height));
    color pix = myMovie.get(rx, ry);
    frameRate(15);
    fill(red(pix), green(pix), blue(pix));
    ellipse(rx, ry, pointillize, pointillize);
  }*/
}


// class Sensor
class Sensor {

  float maxValue;
  float closestValue;
  float max_distance;

  float value; // Precedemment appelé sensorValue dans les autres exos
  PFont font;

  int state; //Etat actuel
  int prevState; //Avoir connaissance des etats anterieur pour detecter un chnagement

  PVector pos;

  Sensor () {
   max_distance = dist(10, 10, width, height);

    maxValue = 10000; //10m
    pos = new PVector(0, 0);

    value = maxValue;
    font = loadFont("CheddarJack-48.vlw");
    state = 2;
    prevState = -1;
  }

  void update() {
    frameRate(5);
    context.update(); //Actualiser la kinect
    updateValue(); //Savoir ou est-ce qu'on se situe par rapport a la camera
   //int rx = int(random(paths[0].width));
   //int ry = int(random(paths[0].height));
    //color pix = paths.get(rx, ry);
    if (value >= 1000) {
      state = 2;
        image(paths[0], 0, 0, width, height);
     // fill(red(pix), green(pix), blue(pix));
    //  ellipse(rx, ry, 50, 50);
    } else if (value >= 500) {
        image(paths[1], 0, 0, width, height);
     // fill(red(pix), green(pix), blue(pix));
     // ellipse(rx, ry, 300, 300);
    } else {
 
      state = 0;
      image(paths[2], 0, 0, width, height);

     // fill(red(pix), green(pix), blue(pix));
      //ellipse(rx, ry, 500, 500);
    }

    if (state != prevState) {
      changeImage(state);
    }

    prevState = state; //Actualiser le programme, la valeur de l'etat precedent
  }

  void updateValue() {
    closestValue = maxValue;

    int[] depthValues = context.depthMap();
    int mapWidth = context.depthWidth();
    int mapHeight = context.depthHeight();
    float xPos = 0;
    float yPos = 0;

    for (int y=0; y<mapHeight; y++) {
      for (int x=0; x<mapWidth; x++) {
        int i = x + y * mapWidth;
        int currentDepthValue = depthValues[i];

        if (currentDepthValue > 0 && currentDepthValue < closestValue) {
          closestValue = currentDepthValue;
          xPos = x;
          yPos = y;
        }
      }
    }

    pos.x = lerp(pos.x, xPos, 0.1); //Passer de pos.x a xPos progressivement
    pos.y = lerp(pos.y, yPos, 0.1);

    value = lerp(value, closestValue, 0.1); //Enlever le bruit
  }

  void displayInfos() {
    fill (186, 255, 13);
    textFont(font);
    String str = (int) value/10 + " cm";
    text(str, 20, 60);
  }

  void displayClosestPoint() {
    fill(255);
    stroke(0);
    ellipse(pos.x, pos.y, 20, 20);
  }
}


voila je sais pas si vous avez compris, n'hésitez pas à me poser des questions
merci d'avance

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017