Bonjour à tous !
Tout d'abord merci d'avance pour votre aide.
Afin de finaliser mon projet de diplôme, j'ai besoin de coder via le logiciel Processing mais étant totalement novice, je patauge un peu ...
Je vous expose le problème : j'ai utilisé un code en ligne activant la caméra et créant un effet light-painting (Merci Cdriko), et je voudrais y ajouter un élément primordial pour la réalisation finale :
J'aimerais incorporer à l'écran où apparait l'image de la webcam une image générée aléatoirement - mon idée de base était de générer une image à partir de l'historique de navigation, ce serait parfait mais sûrement plus compliqué ? Ou via un autre logiciel ?
Cette image serait idéalement de simples lignes courbes - des "chemins" que nous pourrions suivre grâce à nos bras, notre corps etc. Pas forcément très esthétique, ce n'est pas le but, simplement qu'elles apparaissent sur l'écran ...
Je vous transmets le code que j'utilise comme base ...
Mon projet est à rendre mercredi soir et je suis totalement noyée là-dedans ...
//import de la librairie GsVideo
import codeanticode.gsvideo.*;
//objet video
GSCapture video;
PImage masque;
color black = color(0);
int numPixels;
int tolerance;
void setup() {
size(640, 480); // Change size to 320 x 240 if too slow at 640 x 480
// Uses the default video input, see the reference if this causes an error
video = new GSCapture(this, width, height);
video.start();
masque= new PImage(width, height);
numPixels = video.width * video.height;
noStroke();
smooth();
background(0);
video.mask(masque);//appliquer un masque à l'image video
tolerance = 127; // Set the tolerance value
}
void draw() {
if (video.available()) {
video.read();
///creation du masque
video.loadPixels();
masque.loadPixels();
float pixelBrightness; // Declare variable to store a pixel's color
// Turn each pixel in the video frame black or white depending on its brightness
loadPixels();
for (int i = 0; i < numPixels; i++) {
pixelBrightness = brightness(video.pixels[i]);
if (pixelBrightness > tolerance) { // If the pixel is brighter than the
masque.pixels[i] = video.pixels[i]; // tolerance value, make it white
}
else { // Otherwise,
masque.pixels[i] = black; // make it black
}
}
updatePixels();
video.mask(masque);
tint(255, 255, 255, 150);
// blend(video, 0, 0, width, height, 0, 0, width, height, LIGHTEST);
//blend(video, 0, 0, 33, 100, 67, 0, 33, 100, ADD);
image(video,0,0);
// Draw the webcam video onto the screen
}
}
void mouseClicked() {
background(0);///effacer l'écran
}
void keyPressed(){
switch(keyCode) {
case 83: //S ou s
print("sauvegarde de l'image...");
saveFrame("data/capt-####.jpg");
background(0);
println("OK");
break;
case 38: //fleche du haut
if(tolerance<255)tolerance++;
println("tolerance="+tolerance);
break;
case 40://fleche du bas
if(tolerance>0)tolerance--;
println("tolerance="+tolerance);
break;
default: // Default executes if the case labels
println("touche inconnue:"+keyCode); // don't match the switch parameter
break;
}
}
Dernière modification par lolate (2014-12-01 22:48:25)
Hors ligne
Une possibilité est d'afficher en dernier une image avec de la transparence :
Cette image, je l'ai construite avec ceci :
PImage resultat; void setup() { size(640, 480); noFill(); noLoop(); resultat = createImage(width, height, ARGB); } void draw() { background(255); strokeWeight(3); stroke(0); for (int i = 0; i < 15; i++) { bezier(0, 80 + i * 30, i * random(0, 200), 90 + i * random(0, 20), i * 10, 10, width, 20 + i * 40); } loadPixels(); resultat.loadPixels(); for (int i = 0; i < width * height; i++) { resultat.pixels[i] = color(0, 255 - brightness(pixels[i])); } resultat.updatePixels(); resultat.save("Lignes.png"); }
Dernière modification par Mushussu (2014-12-02 08:42:42)
Hors ligne
Ça fonctionne, merci beaucoup !! Serait-il possible d'animer ces lignes lors du tracé ?
Dernière modification par lolate (2014-12-02 15:45:02)
Hors ligne
Dans ce cas, c'est une autre approche :
PImage resultat; float[] indiceA, indiceB; int[] a, b; void setup() { size(640, 480); noFill(); resultat = createImage(width, height, ARGB); indiceA = new float[15]; indiceB = new float[15]; a = new int[15]; b = new int[15]; for (int i = 0; i < 15; i++) { a[i] = (int)random(0, 200); b[i] = (int)random(0, 20); indiceA[i] = (int)random(-100, 100); indiceB[i] = (int)random(-100, 100); } } void draw() { background(255, 0); strokeWeight(3); stroke(0); for (int i = 0; i < 15; i++) { bezier(0, 80 + i * 30, 4 * a[i] + noise(indiceA[i]) * 800, 90 + 4 * b[i] + noise(indiceB[i])* 500, i * 10, 10, width, 20 + i * 40); indiceA[i] += 0.01; indiceB[i] += 0.01; } }
Hors ligne
Super, merci encore !
Hors ligne
Pages: 1