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
|