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