Introduction: How to Create an Processing Controlled Webcam With Photo Effects & Overlay
This Instructables guide will provide step-by-step instructions on how to code for an processing controlled webcam that has a photo effect on the image and a logo overlay. The final solution is a tiled wall of posterised photos streamed live from the webcam.
For this example the overlay used is a Blue Moon logo to illustrate a personalised beer mat, which are tiled to create a photomosaic of the Blue Moon logo.
For this example the overlay used is a Blue Moon logo to illustrate a personalised beer mat, which are tiled to create a photomosaic of the Blue Moon logo.
Step 1: This Is the Coding for the Processing, With Descriptions of Each Step
import processing.video.*; // this command tells processing to use the compouter
int w = 640; //this dimension is the width of the screen
int h = 480; //this dimension is the height of the screen
int fps = 60; //this shows the frame rate the webcam will display
int i = 0; //this sets the counter (used later in the sketch) to 0 at the start
PImage img; //these img codes represent the 8 tiled images around the cam, and the 9th is the picture surround
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img7;
PImage img8;
PImage img9;
Capture cam;
void setup()
{
size(screen.width, screen.height, P3D); //this sets the dimensions of the display
frameRate(fps); //this uses the fps set before
cam = new Capture(this, w, h); //this tells the cam to capture its full scale
}
void draw() //the start of the display sketch
{
if (cam.available() == true) { //this command tells the sketch to read the screen
cam.read();
img = loadImage("person-1.tif" ); //load the images set up with the tags created earlier
img2 = loadImage("person-2.tif" );
img3 = loadImage("person-3.tif" );
img4 = loadImage("person-4.tif" );
img5 = loadImage("person-5.tif" );
img6 = loadImage("person-6.tif" );
img7 = loadImage("person-7.tif" );
img8 = loadImage("person-8.tif" );
img9 = loadImage("bluemoon_2.png" );
}
image(cam, width/3, height/3, width/3, height/3); //this sets the camera to display in the centre of the screen, using thirds to distribute it
tint(17);
noTint();
image(img, 0, 0, width/3, height/3); //these set out the images in tiles arounf the screen using thirds, and some pixel counts
image(img9, 0, 0, width/3, height/3);
image(img2, width/3, 0, width/3, height/3);
image(img9, width/3, 0, width/3, height/3);
image(img3, 2*width/3, 0, width/3, height/3);
image(img9, 2*width/3, 0, width/3, height/3);
image(img4, 0, 266, width/3, height/3);
image(img9, 0, 266, width/3, height/3);
image(img5, 2*width/3, 266, width/3, height/3);
image(img9, 2*width/3, 266, width/3, height/3);
image(img6, 0, 532, width/3, height/3);
image(img9, 0, 532, width/3, height/3);
image(img7, width/3, 532, width/3, height/3);
image(img9, width/3, 532, width/3, height/3);
image(img8, 2*width/3, 532, width/3, height/3);
image(img9, 2*width/3, 532, width/3, height/3);
image(img9, width/3, 266, width/3, height/3);
if (keyPressed == true) { //setting up a trigger for the camera to take a photo
if (key == 'a') { //the trigger is the 'a' key
filter( BLUR, 3 ); //the image is then blurred
filter( POSTERIZE, 16 ); //and then posterized
if (i < 8) { //this tells the counter that if it less than 8 ...
i++; //then it should add a consectuvie number
}
else i = 1; //this tells it to return to 1 once it reaches 8
PImage img =get(width/3, height/3, width/3, height/3); //this tells processing what portion of the screen to save when 'a' is pressed
img.save("person-"+i); //this uses the pre-mentioned 'i' number when saving the captured image
}
}
}
//the coding will look like the picture bellow when copied and pasted into processing
int w = 640; //this dimension is the width of the screen
int h = 480; //this dimension is the height of the screen
int fps = 60; //this shows the frame rate the webcam will display
int i = 0; //this sets the counter (used later in the sketch) to 0 at the start
PImage img; //these img codes represent the 8 tiled images around the cam, and the 9th is the picture surround
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img7;
PImage img8;
PImage img9;
Capture cam;
void setup()
{
size(screen.width, screen.height, P3D); //this sets the dimensions of the display
frameRate(fps); //this uses the fps set before
cam = new Capture(this, w, h); //this tells the cam to capture its full scale
}
void draw() //the start of the display sketch
{
if (cam.available() == true) { //this command tells the sketch to read the screen
cam.read();
img = loadImage("person-1.tif" ); //load the images set up with the tags created earlier
img2 = loadImage("person-2.tif" );
img3 = loadImage("person-3.tif" );
img4 = loadImage("person-4.tif" );
img5 = loadImage("person-5.tif" );
img6 = loadImage("person-6.tif" );
img7 = loadImage("person-7.tif" );
img8 = loadImage("person-8.tif" );
img9 = loadImage("bluemoon_2.png" );
}
image(cam, width/3, height/3, width/3, height/3); //this sets the camera to display in the centre of the screen, using thirds to distribute it
tint(17);
noTint();
image(img, 0, 0, width/3, height/3); //these set out the images in tiles arounf the screen using thirds, and some pixel counts
image(img9, 0, 0, width/3, height/3);
image(img2, width/3, 0, width/3, height/3);
image(img9, width/3, 0, width/3, height/3);
image(img3, 2*width/3, 0, width/3, height/3);
image(img9, 2*width/3, 0, width/3, height/3);
image(img4, 0, 266, width/3, height/3);
image(img9, 0, 266, width/3, height/3);
image(img5, 2*width/3, 266, width/3, height/3);
image(img9, 2*width/3, 266, width/3, height/3);
image(img6, 0, 532, width/3, height/3);
image(img9, 0, 532, width/3, height/3);
image(img7, width/3, 532, width/3, height/3);
image(img9, width/3, 532, width/3, height/3);
image(img8, 2*width/3, 532, width/3, height/3);
image(img9, 2*width/3, 532, width/3, height/3);
image(img9, width/3, 266, width/3, height/3);
if (keyPressed == true) { //setting up a trigger for the camera to take a photo
if (key == 'a') { //the trigger is the 'a' key
filter( BLUR, 3 ); //the image is then blurred
filter( POSTERIZE, 16 ); //and then posterized
if (i < 8) { //this tells the counter that if it less than 8 ...
i++; //then it should add a consectuvie number
}
else i = 1; //this tells it to return to 1 once it reaches 8
PImage img =get(width/3, height/3, width/3, height/3); //this tells processing what portion of the screen to save when 'a' is pressed
img.save("person-"+i); //this uses the pre-mentioned 'i' number when saving the captured image
}
}
}
//the coding will look like the picture bellow when copied and pasted into processing
Step 2: Finalised Webcam With Photo Effect and Logo Overlay
Sucessful coding for webcam, with blue moon logo on top
coding:
import processing.video.*;
int w = 640;
int h = 480;
int fps = 25;
int i = 0;
PImage img;
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img7;
PImage img8;
PImage img9;
Capture cam;
void setup()
{
size(screen.width, screen.height, P3D);
frameRate(fps);
cam = new Capture(this, w, h);
}
void draw()
{
//drop blue moon logog in here
if (cam.available() == true) {
cam.read();
img = loadImage(“person-1.tif” );
img2 = loadImage(“person-2.tif” );
img3 = loadImage(“person-3.tif” );
img4 = loadImage(“person-4.tif” );
img5 = loadImage(“person-5.tif” );
img6 = loadImage(“person-6.tif” );
img7 = loadImage(“person-7.tif” );
img8 = loadImage(“person-8.tif” );
img9 = loadImage(“bluemoon_2.png” );
}
image(cam, width/3, height/3, width/3, height/3);
tint(17);
noTint();
image(img, 0, 0, width/3, height/3);
image(img2, width/3, 0, width/3, height/3);
image(img3, 2*width/3, 0, width/3, height/3);
image(img4, 0, 266, width/3, height/3);
image(img5, 2*width/3, 266, width/3, height/3);
image(img6, 0, 532, width/3, height/3);
image(img7, width/3, 532, width/3, height/3);
image(img8, 2*width/3, 532, width/3, height/3);
image(img9, width/3, 266, width/3, height/3);
if (keyPressed == true) {
if (key == ‘a’) {
filter( BLUR, 3 );
filter( POSTERIZE, 12 );
if (i < 8) {
i++;
}
else i = 1;
PImage img =get(width/3, height/3, width/3, height/3);
img.save(“person-“+i);
}
}
}
coding:
import processing.video.*;
int w = 640;
int h = 480;
int fps = 25;
int i = 0;
PImage img;
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img7;
PImage img8;
PImage img9;
Capture cam;
void setup()
{
size(screen.width, screen.height, P3D);
frameRate(fps);
cam = new Capture(this, w, h);
}
void draw()
{
//drop blue moon logog in here
if (cam.available() == true) {
cam.read();
img = loadImage(“person-1.tif” );
img2 = loadImage(“person-2.tif” );
img3 = loadImage(“person-3.tif” );
img4 = loadImage(“person-4.tif” );
img5 = loadImage(“person-5.tif” );
img6 = loadImage(“person-6.tif” );
img7 = loadImage(“person-7.tif” );
img8 = loadImage(“person-8.tif” );
img9 = loadImage(“bluemoon_2.png” );
}
image(cam, width/3, height/3, width/3, height/3);
tint(17);
noTint();
image(img, 0, 0, width/3, height/3);
image(img2, width/3, 0, width/3, height/3);
image(img3, 2*width/3, 0, width/3, height/3);
image(img4, 0, 266, width/3, height/3);
image(img5, 2*width/3, 266, width/3, height/3);
image(img6, 0, 532, width/3, height/3);
image(img7, width/3, 532, width/3, height/3);
image(img8, 2*width/3, 532, width/3, height/3);
image(img9, width/3, 266, width/3, height/3);
if (keyPressed == true) {
if (key == ‘a’) {
filter( BLUR, 3 );
filter( POSTERIZE, 12 );
if (i < 8) {
i++;
}
else i = 1;
PImage img =get(width/3, height/3, width/3, height/3);
img.save(“person-“+i);
}
}
}