Bonjour
Je suis en train de réaliser un petit programme processing tout bête à partir de vidéos d'animations.
Or je souhaitais faire des incrustation avec des fond vert... J'ai un peut cherché, et malheureusement, ce que j'ai trouvé me semblait un peut au delà de mes compétences peut avancées je doit dire
Quelqu'un pourrait juste m'expliquer? Je cherche tout simplement comment transformer le vert en transparent?
Merci à tous et bonne journée
Hors ligne
Salut,
Il suffit de parcourir l'ensemble des images d'un flux vidéo.
Si le pixel courant est vert, alors il est transparent. Je choisis le mode colorimétrique HSB pour ne pas m'embêter avec la synthèse des couleurs:
import processing.video.*; Capture cam; int seuilS = 200; int seuilB = 20; void setup(){ size(640, 480); cam = new Capture(this); cam.start(); } void draw(){ background(255, 0, 0); cam.loadPixels(); for(int i = 0; i < cam.pixels.length; i++){ if(hue(cam.pixels[i]) >= 90 && hue(cam.pixels[i]) <= 135 && saturation(cam.pixels[i]) > seuilS && brightness(cam.pixels[i]) > seuilB){ cam.pixels[i] = color(0, 0); } } cam.updatePixels(); image(cam, 0, 0); } void captureEvent(Capture c){ c.read(); }
Hors ligne
MErci beaucoup pour cette réponse super rapide... Heu je viens d'essayé, en modifiant un peut le tout mais j'ai l'impression que cela ne fonctionne pas...
J'ai dut mal faire quelque chose non?
citation :
import processing.video.*;
Movie cam;
int seuilS = 200;
int seuilB = 20;
void setup() {
size(1900, 1080);
cam = new Movie(this, "test.mp4");
cam.loop();
}
void draw() {
background(255, 0, 0);
cam.loadPixels();
for (int i = 0; i < cam.pixels.length; i++) {
if (hue(cam.pixels[i]) >= 90 &&
hue(cam.pixels[i]) <= 135 &&
saturation(cam.pixels[i]) > seuilS
&& brightness(cam.pixels[i]) > seuilB) {
cam.pixels[i] = color(0, 0);
}
}
cam.updatePixels();
image(cam, 0, 0, 900, 600);
cam.read();
}
Hors ligne
yep ! Tu as oublié la fonction read():
import processing.video.*; Movie cam; int seuilS = 170; int seuilB = 20; void setup() { size(640, 360, P2D); //1900, 1080 cam = new Movie(this, "test.mp4"); cam.loop(); } void movieEvent(Movie m){ m.read(); } void draw() { background(255, 0, 0); cam.loadPixels(); for (int i = 0; i < cam.pixels.length; i++) { if (hue(cam.pixels[i]) >= 83 && hue(cam.pixels[i]) <= 100 && saturation(cam.pixels[i]) > seuilS && brightness(cam.pixels[i]) > seuilB) { cam.pixels[i] = color(0, 0); } } cam.updatePixels(); image(cam, 0, 0); cam.read(); //println(hue(get(mouseX, mouseY))); }
Il faudra sans doute bidouiller la tranche des verts dans les conditions…
Hors ligne
Merci beaucoup, en bidouillant un peut, c'est absolument parfait
Une derniere question, si je veux mettre une vidéo l'une sur l'autre des que je tape sur une touche par exemple, c'est faisable? ça m'a l'air de moyennement marcher?
Hors ligne
Hors ligne