Annonce

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


#1 2010-05-03 19:36:23 updatePixels() et librairie Vidéo

videoactif
membre
Lieu: Morteau
Date d'inscription: 2010-01-27
Messages: 52

updatePixels() et librairie Vidéo



Bonjour je continue a explorer processing et le traitement de la vidéo.
La j'en suis a essayer de créer un effet miroir ( l'image se reflète en son milieu ).
Donc avant d'y arriver, ce qui me demandera de griller un certain nombre de mes neuronnes, je voudrais simplement mettre la moitié de mon image en noir.
Pour ce fait j'ai composé ce petit script :

int m; 	


import processing.video.*; 
Capture myCapture; 
 
void setup() { 
  size(640, 480); 
  String s = "Sony HD Eye for PS3 (SLEH 00201)"; 
  myCapture = new Capture(this, width, height);
  // Set the frameRate to read 4 new images per second 
 // myCapture.frameRate(30);
} 
 
void draw() { 
  if(myCapture.available()) { 
    myCapture.read(); 
  }
 loadPixels();
  m=mouseY*width+mouseX;
for (int j = 0; j<height;j++){
  for (int i = 0; i<width;i++){
    if(i>width/2){
      pixels[j*width+i]=color(0,0,0);
  }
}
}
  myCapture.updatePixels();

println("rouge :"+ red(pixels[m]) + "vert :"+green(pixels[m])+"bleu :"+blue(pixels[m]));
  image(myCapture, 0, 0); 


}

Quand je survole l'image avec ma souris, mon println m'affiche bien des valeurs 0 0 0 pour la moitié droite de mon image, mais pour ce qui est de mon image, elle est pleine, la partie droite affiche ce que voit ma caméra...

J'ai essayé avec un simple updatePixels(); , mais même effet.

Alors si quelqu'un a une piste, je prends
Merci de m'avoir lu


Programming is like sex: one mistake and you’re providing support for a lifetime.  Michael Sinz

Hors ligne

 

#2 2010-05-03 20:04:38 Re : updatePixels() et librairie Vidéo

videoactif
membre
Lieu: Morteau
Date d'inscription: 2010-01-27
Messages: 52

Re: updatePixels() et librairie Vidéo



Résolu, toute référence au traitement des pixels doit être précédé de l'objet myCapture :

int m; 	


import processing.video.*; 
Capture myCapture; 
 
void setup() { 
  size(640, 480); 
  String s = "Sony HD Eye for PS3 (SLEH 00201)"; 
  myCapture = new Capture(this, width, height);
  // Set the frameRate to read 4 new images per second 
 // myCapture.frameRate(30);
} 
 
void draw() { 
  if(myCapture.available()) { 
    myCapture.read(); 
  }
 myCapture.loadPixels();
  m=mouseY*width+mouseX;
for (int j = 0; j<height;j++){
  for (int i = 0; i<width;i++){
    if(i>width/2){
      myCapture.pixels[j*width+i]=color(0,0,0);
  }
}
}
myCapture.updatePixels();

println("rouge :"+ red(myCapture.pixels[m]) + "vert :"+green(myCapture.pixels[m])+"bleu :"+blue(myCapture.pixels[m]));
  image(myCapture, 0, 0); 


}

Programming is like sex: one mistake and you’re providing support for a lifetime.  Michael Sinz

Hors ligne

 

#3 2010-05-03 20:44:14 Re : updatePixels() et librairie Vidéo

22_
membre
Lieu: paris
Date d'inscription: 2010-04-08
Messages: 189

Re: updatePixels() et librairie Vidéo



"Résolu, toute référence au traitement des pixels doit être précédé de l'objet myCapture"

Salut,

Attention, c'est valable dans le cas des pixels de ton objet myCapture ...
mais, loadPixels() et updatePixels() sont des fonctions qui permettent aussi de manipuler le buffer de ta sortie processing

ainsi pour ton effet miroir (j'ai pas testé) :

loadPixels(); //chargement des pixels de la sortie
myCapture.loadPixels(); // chargement des pixels de myCapture

// effet miroir de myCapture vers la sortie ssi width = myCapture.width & height = myCapture.height
for(int i = 0; i < width; i++){
  for(int j = 0; j < height; j++){
    pixels[j*width + width-1 - i] = myCapture.pixels[j*width + i]; 
  }
}

updatePixels(); // maj de la sortie 
// normalement, pas besoin de faire un myCapture.updatePixels() puisque tu ne fais que lire ce tableau
//image(myCapture, 0, 0); // ne pas mettre, tu re-updaterais ta sortie

++

Dernière modification par 22_ (2010-05-03 20:48:27)

Hors ligne

 

#4 2010-05-03 20:54:35 Re : updatePixels() et librairie Vidéo

videoactif
membre
Lieu: Morteau
Date d'inscription: 2010-01-27
Messages: 52

Re: updatePixels() et librairie Vidéo



Merci, entre temps j'ai créé ce bout de code qui marche, mais je sais pas si c'est le plus optimisé..

 myCapture.loadPixels();

for (int j = 0; j<height;j++){
  for (int i = 0; i<width;i++){
    if(i>width/2){
     p=i-width/2; 
      myCapture.pixels[j*width+i]=myCapture.pixels[j*width+width/2-p];
  }
}
}
myCapture.updatePixels();

La question que je me pose c'est en mélangeant l'image présente dans le buffer , qui est si je ne me trompe l'image précédente ou l'image t-1 et celle de la cam l'image t (actuel)
Je vais tester ton code voir ce qu'il donne car je trouve pas le mien très esthétique...
++


Programming is like sex: one mistake and you’re providing support for a lifetime.  Michael Sinz

Hors ligne

 

#5 2010-05-03 20:59:54 Re : updatePixels() et librairie Vidéo

videoactif
membre
Lieu: Morteau
Date d'inscription: 2010-01-27
Messages: 52

Re: updatePixels() et librairie Vidéo



Donc je viens de tester ton code, lors de l'affichage de l'image : image(myCapture, 0, 0);
l'effet n'est pas visible, mais en appliquant que sur le myCapture soit :
myCapture.pixels[j*width + width-1 - i] = myCapture.pixels[j*width + i];
cela fonctionne, et il suffit juste d'inverser les deux pour obtenir le miroir inverse ( soit droite-etiord, ou gauche-ehcaug ).
Merci^^
++


Programming is like sex: one mistake and you’re providing support for a lifetime.  Michael Sinz

Hors ligne

 

#6 2010-05-03 22:02:36 Re : updatePixels() et librairie Vidéo

22_
membre
Lieu: paris
Date d'inscription: 2010-04-08
Messages: 189

Re: updatePixels() et librairie Vidéo



videoactif a écrit:

Donc je viens de tester ton code, lors de l'affichage de l'image : image(myCapture, 0, 0);
l'effet n'est pas visible, mais en appliquant que sur le myCapture soit :
myCapture.pixels[j*width + width-1 - i] = myCapture.pixels[j*width + i];
cela fonctionne, et il suffit juste d'inverser les deux pour obtenir le miroir inverse ( soit droite-etiord, ou gauche-ehcaug ).
Merci^^
++

C'est pour ça que j'ai précisé dans le code de ne pas appeler la fonction image() qui est un update de pixels - smile

en fait faire image(myCapture, 0, 0) est équivalent à

loadPixels();
myCapture.loadPixels();
for(blabla){
  for(blabla){
    pixels[j*width + i] = myCapture.pixels[j*width + i];
  }
}
updatePixels();

pixels[] est ce qui s'affiche dans ta sortie processing.

concernant ton code, fais attention aux effets de bords ...
myCapture.pixels[j*width+i]=myCapture.pixels[j*width+width/2-p];
tu modifies le tableau que tu lis ... normalement, tu devrais d'abord faire une copie de ton tableau, puis modifier ton tableau originel en lisant ta copie, ça peut paraître lourd mais ça t'évitera des bugs ... typiquement si tu lis un pixel déjà modifié dans ta boucle.

++

Dernière modification par 22_ (2010-05-03 22:03:20)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024