Bonjour :-)
J'ai un petit problème concernant l'utilisation de pixels[] sur un flux d'images vidéo dans Processing.
Par exemple, lorsque j'utilise pixels[] pour changer les couleurs des pixels de ma capture vidéo, Processing semble avoir du mal à suivre la cadence et n'applique pas l'effet voulu sur toutes les images et leur totalité de manière homogène; je ne sais pas si cela est du à la puissance de mon ordi (je ne pense pas car j'ai le souvenir d'avoir déjà réussi à utiliser pixels[] dans ce cadre sans problèmes…) à moins que mon code soit trop peu optimisé (je penche pour ça). À noter quand même que mon ordinateur n'est plus tout jeune…
Voici un exemple:
import processing.video.*;
Capture cam;
void setup() {
size(640, 480);
cam = new Capture(this, width, height);
cam.start();
}
void captureEvent(Capture cam) {
cam.read();
}
void draw() {
cam.loadPixels();
for(int i = 0; i < cam.width * cam.height; i++){
if(brightness(cam.pixels[i]) < 180){
cam.pixels[i] = color(0);
}
else{
cam.pixels[i] = color(255, 255, 0);
}
}
image(cam, 0, 0);
}Quelle est l'astuce pour contourner ce problème?
Merci d'avance :-)
Dernière modification par jojolaglaise (2015-07-04 11:43:26)
Hors ligne
Bonjour,
Cela n'a rien à voir avec la puissance de ton ordinateur. Il y a une confusion avec variable locale et variable globale.
cam dans la méthode captureEvent() est une variable locale différente de ta variable globale cam. Il faut faire attention à ne pas utiliser des variables de même nom pour éviter les confusions.
Voici le code fonctionnel :
import processing.video.*;
Capture cam;
void setup() {
size(640, 480);
cam = new Capture(this, width, height);
cam.start();
}
void draw() {
if (cam.available()) {
cam.read();
cam.loadPixels();
for (int i = 0; i < cam.width * cam.height; i++) {
if (brightness(cam.pixels[i]) < 180) {
cam.pixels[i] = color(0);
} else {
cam.pixels[i] = color(255, 255, 0);
}
}
cam.updatePixels();
}
image(cam, 0, 0);
}Si tu souhaites malgré tout utiliser les interruptions :
import processing.video.*;
Capture cam;
PImage imago;
void setup() {
size(640, 480);
cam = new Capture(this, width, height);
cam.start();
imago = createImage(width, height, RGB);
}
void captureEvent(Capture cam) {
cam.read();
cam.loadPixels();
for (int i = 0; i < cam.width * cam.height; i++) {
if (brightness(cam.pixels[i]) < 180) {
imago.pixels[i] = color(0);
} else {
imago.pixels[i] = color(255, 255, 0);
}
}
imago.updatePixels();
}
void draw() {
image(imago, 0, 0);
}Hors ligne
Oh! Mille merci!
Effectivement, je vois mon erreur… Je me être trompé-je misérablement!
Une bonne journée!
Hors ligne
Pages: 1