Cheminements

De Centre de Ressources Numériques - Labomedia
Révision de 4 juin 2015 à 08:37 par Serge (discussion | contributions)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Cheminements
Cheminements.png


Pour modifier la page utiliser l'onglet Modifier avec formulaire.

Résumé Filtre Processing
Auteur(s) 01ivier
Licence CC-BY-SA 3
Date de création 11 décembre 2014


Intentions / Contexte

Fait suite à une aide apportée sur le forum Codelab.

Principe de fonctionnement

Affiche un flux vidéo au travers d'un cheminement de segments.

Besoins / Compétences

Processing

Documentation

Explications

Une personne ayant demandé sur le forum Codelab comment générer le tracé d'un chemin aléatoire, j'ai partiellement répondu à sa demande et réalisé que ce pourrait être la base d'un filtre vidéo.

À chaque frame, 500 segments sont dessinés aléatoirement au bout des 500 précédents. Leur couleur est déterminée par celle du pixel de la vidéo où se situe la première extrémité de chaque segment.

Vidéo

Code

 
import processing.video.*;  

Capture cam;
int Longg = 640;  
int Largg = 480;
int nbPix = Longg*Largg;

Chemin[] carte;

void setup() {

  cam = new Capture(this, Longg, Largg, "/dev/video0", 20);
  cam.start();

  size(cam.width, cam.height);
  frameRate(60);

  carte = new Chemin[500];
  for (int i=0; i<carte.length; i++) {
    carte[i] = new Chemin();
  }
  
  background(0);
}

void draw() {

  if (cam.available() == true) { 
    cam.read();
  }

  for (int i=0; i<carte.length; i++) {
    carte[i].dessine();
  }
}


class Chemin {

  int X1, Y1, X2, Y2;
  color couleur;

  Chemin() {
  }

  void dessine() {

    if (frameCount == 1) {

      X1 = width/2;
      Y1 = height/2;

      X2 = X1 + decalage();
      Y2 = Y1 + decalage();
    }

    if (X1>0 && X1<width && Y1>0 && Y1<height) {
      couleur = cam.pixels[X1+Y1*width];
    }

    stroke(couleur);
    line(X1, Y1, X2, Y2);

    X1 = X2;
    Y1 = Y2;

    X2 = X1 + decalage();
    Y2 = Y1 + decalage();
  }

  int decalage() {

    // retourne -5, 0 ou 5
    return(1*(int(random(3))-1));
  }
}