example
Example
// Learning Processing
// Daniel Shiffman
// http://www.learningprocessing.com

// Example 16-14: Overall motion

import processing.video.*;

// Variable for capture device
Capture video;
// Previous Frame
PImage prevFrame;

// How different must a pixel be to be a "motion" pixel
float threshold = 50;

void setup() {
  size(320,240);
  // Using the default capture device
  video = new Capture(this, width, height, 15);
  // Create an empty image the same size as the video
  prevFrame = createImage(video.width,video.height,RGB);
}

void draw() {
  background(0);
  
  // You don't need to display it to analyze it!
  image(video,0,0);
  
  // Capture video
  if (video.available()) {
    // Save previous frame for motion detection!!
    prevFrame.copy(video,0,0,video.width,video.height,0,0,video.width,video.height);
    prevFrame.updatePixels();
    video.read();
  }
  
  loadPixels();
  video.loadPixels();
  prevFrame.loadPixels();
  
  // Begin loop to walk through every pixel
  // Start with a total of 0
  float totalMotion = 0;
  
  // Sum the brightness of each pixel
  for (int i = 0; i < video.pixels.length; i ++ ) {
    // Step 2, what is the current color
    color current = video.pixels[i];
    
    // Step 3, what is the previous color
    color previous = prevFrame.pixels[i];
    
    // Step 4, compare colors (previous vs. current)
    float r1 = red(current); 
    float g1 = green(current);
    float b1 = blue(current);
    float r2 = red(previous); 
    float g2 = green(previous);
    float b2 = blue(previous);
    
    // Motion for an individual pixel is the difference between the previous color and current color.
    float diff = dist(r1,g1,b1,r2,g2,b2);
    // totalMotion is the sum of all color differences. 
    totalMotion += diff; 
  }
  
  // averageMotion is total motion divided by the number of pixels analyzed.
  float avgMotion = totalMotion / video.pixels.length; 
  
  // Draw a circle based on average motion
  smooth();
  noStroke();
  fill(0);
  float r = avgMotion*2;
  ellipse(width/2,height/2,r,r);

}