Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-07-04 11:42:44 pixels[] : Balayage indésirable

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 137
Site web

pixels[] : Balayage indésirable



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

 

#2 2015-07-04 12:49:21 Re : pixels[] : Balayage indésirable

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: pixels[] : Balayage indésirable



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

 

#3 2015-07-04 13:51:17 Re : pixels[] : Balayage indésirable

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 137
Site web

Re: pixels[] : Balayage indésirable



Oh! Mille merci! smile Effectivement, je vois mon erreur… Je me être trompé-je misérablement!
Une bonne journée!

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024