Annonce

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


#1 2014-11-24 05:06:36 instruction pixels[].

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

instruction pixels[].



Bonjour.

Dans l'instruction pixels que j'utilise dans le programme suivant:
if(pixels[i]== -16756968 ){
ce qui fonctionne.
j'ai essayez de faire :if(pixels[i]>-16756960||pixels[i]<-16756970)donc une plage de 10 éléments pour corriger la couleur par rapport à la luminositée .Mais je m'aperçois que la led reste toujours allumée ;je ne comprends pas pourquoi?.

Code (P5) :

import processing.video.*;
import processing.serial.*;
import cc.arduino.*;
Capture cam;
Arduino arduino;
int led=2;
void setup() {
  size(640, 480);
  frameRate(15);
 println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  arduino.pinMode(led,Arduino.OUTPUT);
 String[] cameras = Capture.list();

  if (cameras == null) {
    println("Failed to retrieve the list of available cameras, will try the default...");
    cam = new Capture(this, 640, 480);
  } if (cameras.length == 0) {
    println("There are no cameras available for capture.");
    exit();
  } else {
    println("Available cameras:");
    for (int i = 0; i < cameras.length; i++) {
      println(cameras[i]);
    }
    cam = new Capture(this, cameras[0]);
      cam.start();
  }
}
void draw() {
  if (cam.available() == true) {
    cam.read();
  }
  image(cam, 0, 0);
loadPixels();
for(int i=0;i<width*height;i++){
  if(pixels[i]== -16756968 ){
     arduino.digitalWrite(led, Arduino.HIGH);
     delay(1000);
  }
}
updatePixels();
 arduino.digitalWrite(led, Arduino.LOW);
  
 
}

Hors ligne

 

#2 2014-11-24 08:52:11 Re : instruction pixels[].

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

Re: instruction pixels[].



C'est normal, les couleurs sont codées sur 32bits de 0 à 0xFFFFFFFF en hexadécimale. Elles ne sont jamais négatives.

Si on garde les valeurs positives, tu testes si la valeur de bleu est comprise entre 224 et 234 :

    if (blue(pixels[i]) > 224 && blue(pixels[i] < 234 ) {

Hors ligne

 

#3 2014-11-25 04:07:05 Re : instruction pixels[].

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: instruction pixels[].



Bonjour.

Merci pour la réponse;mais dans le programme suivant ,j'ai rajouté int a=get(mouseX,mouseY);
                                                                                                         print(a," ");
ce qui me permet de capturer une couleur que je rajoute moi même et passant la couleur devant la camera,
et donc quant je déplace la souris sur l'image j'obtient bien des valeurs négatives;c'est pourquoi je ne comprend pas; je t'envois le petit programme suivant pour que tu puisses voir par toi même.A moins que les valeurs qui apparaissent soit autre choses que des couleurs?..

Merci.


Code (P5) :

import processing.video.*;
Capture cam;
void setup() {
  size(640, 480);
  String[] cameras = Capture.list();
  if (cameras == null) {
    println("Failed to retrieve the list of available cameras, will try the default...");
    cam = new Capture(this, 640, 480);
  } if (cameras.length == 0) {
    println("There are no cameras available for capture.");
    exit();
  } else {
    println("Available cameras:");
    for (int i = 0; i < cameras.length; i++) {
      println(cameras[i]);
    }
       cam = new Capture(this, cameras[0]);
    cam.start();
  }
}
void draw() {
  if (cam.available() == true) {
    cam.read();
  }
  image(cam, 0, 0);
int a=get(mouseX,mouseY);
print(a," ");

}

Hors ligne

 

#4 2014-11-25 06:48:12 Re : instruction pixels[].

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

Re: instruction pixels[].



Si on veut être rigoureux, la méthode get() renvoie un type color. Celui-ci est codé sur 32 bits comme les int.
Comme les valeurs que la caméra renvoit non pas de transparence et comme celle-ci est codée sur les bits de poids forts (c'est-à-dire complètement à gauche). Alors si tu fais un print tu auras toujours des valeurs négatives. La solution est de passer par un print des valeurs hexadécimales, nous obtenons ainsi une meilleure représentation :

  color a = get(mouseX, mouseY);  
  print(hex(a), " ");

C'est ainsi qu'il est préférable de travailler pour les couleurs d'un point.

Hors ligne

 

#5 2014-11-25 10:46:36 Re : instruction pixels[].

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: instruction pixels[].



citation :

C'est ainsi qu'il est préférable de travailler pour les couleurs d'un point.

Merci pour cette explication que j'attendais depuis quelques jours en regardant le ciel. smile
Je me dis que la prochaine fois je poserai la question pour avoir une réponse plus rapidement. tongue


L'Amour au Peuple !

Hors ligne

 

#6 2014-11-26 04:49:07 Re : instruction pixels[].

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: instruction pixels[].



Merci pour la réponse j'ai donc suivis tes conseils ,ce qui me donne la ligne suivante:
if (pixels[i]>#00FF70   &&pixels[i]<#00FF90    cela fonctionne ,mais la détection n'est pas terrible car il y a une grande différence de valeurs entre la variation de luminositées et de distances ce qui agit sur les écarts.J'ai donc testé sur une différence plus grande dans les valeurs de bornages, mais cela na pas l'air d'améliorer le problème;Ce
que je trouve bizarre.

Hors ligne

 

#7 2014-11-26 12:16:45 Re : instruction pixels[].

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

Re: instruction pixels[].



Le bornage que tu indiques est sur les valeurs de bleu. Si tu souhaites avoir des résultas en fonction de la luminosité, utilise la méthode brightness() :
https://www.processing.org/reference/brightness_.html
Tu obtiendras des valeurs entre 0 et 255.

Hors ligne

 

#8 2014-11-27 04:48:58 Re : instruction pixels[].

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: instruction pixels[].



Merci pour les infos, j'ai réussis à le faire fonctionner beaucoup mieux en changeant le code couleur ,les codes dans le domaine de ses adresses #005418 fonctionne très bien,mais la couleur de vert obtenu n'a pas grand-chose à voir avec le vert que je présente devant la caméra qui est #00FF70.Les codes 005418 fonctionnent même avec les changements de luminositée ce qui est un gros avantage par rapport à avant.
Merci pour tous tes conseils.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024