• fullscreen
  • Cours22.pde
  • // Détection du mouvement
    
    // Import de la librairie vidéo de Processing, inclue avec le soft
    import processing.video.*;
    
    // On déclare une objet de capture :
    Capture ma_video; // Capture est une classe de la librairie video
    
    // On crée une variable Image qui nous servira à enregistrer les "images précédentes"
    PImage prevFrame;
    
    // On crée une variable pour le seuil que nous accepterons comme déterminant un changement d'état de pixel :
    float seuil = 100;
    
    void setup() {
    size(320,240);
    ma_video = new Capture(this, width, height, 30);
    
    // On crée une image vide dans laquelle on enregistrera chaque image au fur et à mesure afin de permettre la comparaison avec les suivantes :
    prevFrame = createImage(ma_video.width,ma_video.height,RGB); // 3 paramètres obligatoires : largeur, hauteur, format couleur.
    }
    
    void draw() {
      
    // La capture vidéo :
    if (ma_video.available()) {
    // Avant chaque lecture de nouvelle image vidéo, on enregistre l'image précédente :
    prevFrame.copy(ma_video, 0, 0, ma_video.width, ma_video.height, 0, 0, ma_video.width, ma_video.height); // Source, x, y, largeur, hauteur, copie_x, copie_y, copie_largeur, copie_hauteur)
    prevFrame.updatePixels(); // Mise à jour de la totalité de l'image. On vient de sauver l'image précédente dans la variable prevFrame.
    ma_video.read(); // Lecture du contenu de la vidéo.
    }
    
    // Chargement des pixels du sketch, de la variable ma_video, et de la variable prevFrame.
    loadPixels();
    ma_video.loadPixels();
    prevFrame.loadPixels();
      
    // Scanner des pixels de la source vidéo :
    for (int x = 0; x < ma_video.width; x++ ) {
    for (int y = 0; y < ma_video.height; y++ ) {
    
    // 1 variable pour localiser le pixel en question :
    int localpixel = x + y*ma_video.width;
    
    // On se sert de la localisation du pixel pour dénicher sa couleur actuelle (ma_video) et précédente (prevFrame) :
    color coul_actuelle = ma_video.pixels[localpixel];
    color coul_precedente = prevFrame.pixels[localpixel];
          
    // A l'aide de variables, on récupère les valeurs de rouge, de vert et de bleu du pixel actuel et du pixel dans sa version précédente :
    float r1 = red(coul_actuelle); float v1 = green(coul_actuelle); float b1 = blue(coul_actuelle);
    float r2 = red(coul_precedente); float v2 = green(coul_precedente); float b2 = blue(coul_precedente);
    float difference_couleur = dist(r1, v1, b1, r2, v2, b2);
    
    // Si la couleur d'un pixel a changé au-delà du seuil prévu, cela signifie qu'il y a eu un mouvement sur ce pixel :
    if (difference_couleur > seuil) { 
    // Si mouvement, on colorie en bleu le pixel
    pixels[localpixel] = color(0,0,255);
    } else {
    // Sinon, on colorie le pixel en blanc
    pixels[localpixel] = color(255);
    }
    }
    }
    
    // Au terme de la boucle, mise à jour des pixels du sketch :
    updatePixels();
    
    }
    

    code

    tweaks (0)

    about this sketch

    This sketch is running as Java applet, exported from Processing.

    license

    advertisement

    Christophe Lemaitre

    Cours22

    Add to Faves Me Likey@!
    You must login/register to add this sketch to your favorites.

    « Détecteur de mouvement »
    - Comparaison de 2 objets PImage
    - Double boucle associée à un tableau (Array, liste) pour scanner et conserver les données de couleur des 2 images à comparer
    - Commandes : createImage, loadPixels, updatePixels

    You need to login/register to comment.