2.8 Video

8.1 Video darstellen: Webcam

Zunächst muss die Video Library importiert werden:


import processing.video.*;

Anschließend deklarieren wir ein Capture-Objekt:


Capture video;

Die Library processing.video beinhaltet zwei sehr nützliche Klassen: „Capture“ für Live-Video (bspw. Webcam) und „Movie“ für das Abspielen von bereits existierenden Videoclips. Nun muss das Capure-Objekt noch initialisiert werden:


video = new Capture(this, 800, 600);

Bei der Initialisierung werden drei Parameter definiert: this, die Breite des erfassten Videos in Pixel sowie die Höhe.

Nun kann die Bilderfassung gestartet werden. Dies geschieht mit der Funktion start(), die uns die Video-Klasse bietet:


video.start();

Das Videobild wird schließlich wiederum durch die image()-Funktion dargestellt:


image(video, 0, 0);

Bereits statische Bilder stellten wir mit dieser Funktion dar, ein Video lässt sich gemäß als Bild, dass sich über die Zeit verändert, verstehen (es lässt sich ähnlich analysieren und verarbeiten, wie wir es bereits mit Bildern angestellt haben).

Event bei neuem Bild Events sind bereits als mousePressed() etc. bekannt: immer wenn ein bestimmtes Ereignis auftritt wird eine zugehörige Funktion ausgeführt. Tritt das Ereignis "Maustaste gedrückt" auf, so wird die Funktion mousePressed() ausgeführt. Zur Video-Capture gehört das Event captureEvent, es tritt immer dann ein, wenn die Kamera ein neues Bild aufgezeichnet hat und zur Verfügung stellt. Dann wird die Event-Funktion captureEvent(Camera) ausgeführt. Es empfiehlt sich, diese Funktion zu verwenden um das jeweils neueste Bild der Kamera durch den Code auszulesen:


void captureEvent(Capture video) {
  video.read();                         
}

Hier nun im folgenden Beispiel-Code noch einmal die Einzelnen Schritte zusammengefasst:

Beispiel 2-10


import processing.video.*;          // Die Video-Library importieren

Capture video;                          // Das Capture-Objekt deklarieren

void setup() {
  size(1280, 720);
  video = new Capture(this, 1280, 720);     // Apple Facetime-Cam HD Auflösung
  video.start();
}

void draw() {
  image(video, 0, 0);                   // stelle des Video-Bild im Ausgabefenster dar
}

void captureEvent(Capture video) {
  video.read();                         // das verfügbare Bild der Kamera auslesen
}

8.2 Videodarstellung modifizieren

Beispiele

KNBC(Casey Reas, 2015)

Sol (Robert Hodgin, 2015)

Beispiel 2-11


import processing.video.*;          // Die Video-Library importieren

Capture video;                          // Das Capture-Objekt deklarieren
float resX = 15;
float resY = 15;
int shape = 1;
int thickness = 1;

void setup() {
  size(1280, 720);
  video = new Capture(this, 1280, 720);   // Apple Facetime-Cam HD Auflösung
  video.start();
  rectMode(CENTER);
}

void draw() {
  for(int y=0; y < height; y += resY){ 
     for(int x=0; x < width; x += resX){
       int pos = x + y * width;
       color c = video.get(x,y);
       fill(c);
       if(shape == 1){
         noStroke();
         fill(c,100);
         ellipse(x,y,resX*2, resY*2);
       }else if(shape == 2){

         strokeWeight(thickness);
         color cr = color(red(c),0,0);
         stroke(red(c),red(c),0,60);
         fill(cr, 50);
         rect(x,y, resX, resY);
       }else if(shape == 3){
         int xCur = x+int(random(-resX,resX));
         int yCur = y+int(random(-resY,resY));
         color cCur = video.get(xCur,yCur);
         stroke(cCur,255);
         strokeWeight(thickness);
         line(xCur,yCur, x+random(resX), y+random(resY));
       }
     }
   }
}

void captureEvent(Capture video) {
  video.read();                    // das verfügbare Bild der Kamera auslesen
}

void keyPressed(){

   if(key == '+'){
       resX += 1;
       resY += 1;
   }
   if(key == '-' && resX > 1){
       resX -= 1;
       resY -= 1;
   }

   if(key == '1'){
     resX = 30;
     resY = 30;
     shape = 1;
   }
   if(key == '2'){
     thickness = 8;
     resX = 60;
     resY = 60;
     shape = 2;
   }
   if(key == '3'){
     background(0);
     resX = 15;
     resY = 15;
     shape = 3;
   }
   if(key == 'y'&& thickness > 1){
     thickness = thickness/2;
   }
   if(key == 'x'){
     thickness = thickness*2;
   }
}

8.4 Zeitmanipulation

Die Abspielgeschwindigkeit kann mit der Funktion speed() eingestellt werden. Ein Video kann so auch rückwärts abgespielt werden (speed(-1)). Mit der Funktion jump() kann innerhalb des Videos an eine bestimmte Position gesprungen werden. Der Parameterwert wird in Sekunden angegeben.