(With many thanks to Seb!)
And without formatting (can copy and paste!):
import hypermedia.video.*; 
import processing.opengl.*;
import processing.video.*;
PImage bg;
OpenCV opencv;                    //  Creates a new OpenCV Object
// add image to sketch
PImage particleImg;
Particle[] particles; 
final int MAX_PARTICLES = 150; 
void setup()
{
  size(1000,250); 
  frameRate(30); 
  bg= loadImage ("sky7.jpg");  
  opencv = new OpenCV( this );    //  Initialises the OpenCV object
  opencv.capture( 250,250);     //  Opens a video capture stream
  particles = new Particle[0];  
  particleImg = loadImage("shining star.png");
}
void draw()
{
  noStroke();
  noTint();  
  imageMode(CORNER); 
  opencv.read();                  //  Grabs a frame from the camera
  background (bg);
  opencv.absDiff();               //  Calculates the absolute difference
  imageMode(CENTER); 
  updateParticles();
  makeParticles(opencv.image());
  if(particles.length>MAX_PARTICLES)   
    particles = (Particle[]) subset(particles, particles.length-MAX_PARTICLES); 
  opencv.remember();              //  Remembers the current frame
}
void updateParticles()
{
  for(int i =0; i<particles.length; i++)
  {
    Particle p = particles[i]; 
    p.update(); 
    p.draw();
  }
}
void makeParticles(PImage img)
{
  Particle p;
  for(int i= 0; i<200; i++)
  {
    int xpos = (int) random(img.width); 
    int ypos = (int) random(img.height); 
    if(brightness(img.get(xpos,ypos))>50)
    {
      p = new Particle(width - (xpos*4), ypos); 
      p.draw(); 
      particles = (Particle[]) append(particles, p);
    }
  }
}
class Particle
{
  float xPos; 
  float yPos; 
  float xVel; 
  float yVel; 
  float rotation = 0; 
  float spin; 
  float currentAlpha = 255; 
  float currentScale = 0.5; 
  float drag = 0.2; 
  float fadeSpeed = -5; 
  float shrink = 0.9; 
  float gravity  = -0.1; 
  Particle(float xpos, float ypos)
  {
    this.xPos = xpos; 
    this.yPos = ypos; 
    this.xVel = random(-20,20); 
    this.yVel = random(-20,20); 
    this.currentScale = random(0.01,0.10);
    this.currentAlpha = random (0,255);    
    this.rotation = random(0,360);   
    this.spin =  random(-2,-5);
  }
  void update()
  {
    xVel*=drag; 
    yVel*=drag;
    yVel+=gravity; 
    xPos += xVel; 
    yPos += yVel; 
    currentAlpha -=fadeSpeed; 
    currentScale*=shrink; 
    rotation+=spin;
  }
  void draw() 
  {
    if(currentAlpha<=0) return; 
    pushMatrix();
    tint(255,currentAlpha);
    translate(xPos, yPos); 
    scale(currentScale); 
    rotate(radians(rotation)); 
    image(particleImg, 0, 0);
    popMatrix();
  }
}
I'm now signing off...GoodBye and Goodnight!!



 
0 comments:
Post a Comment