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