Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
import processing.video.*;
Capture video;

Im In der setup() initialisieren  Funktion initialisieren wir die Library und starten die Aufnahme:

Code Block
languagejava
video = new Capture(this, width, height, 30);
video.start();

Die verschiedenen Auflösungen können wir mit println(Capture.list());

...

Im  uns in die Konsole schreiben lassen.

In der draw() fragen  Fuktion fragen wir ab, ob ein neuer Frame neues Bild vorhanden ist und lesen diesen dieses dann ein:

Code Block
languagejava
if (video.available()) {
  video.read();
}

...

Code Block
languagejava
image(video, 0, 0);

Processing_04_1Image RemovedFolgend das komplette Processing-Sketch:

Code Block
titleBeispiel
collapsetrue
import processing.video.*;
Capture video;

void setup()  {
  size(640, 480);
  video = new Capture(this, width, height, 30);
  video.start();
}

void draw() {
  if (video.available()) {
    video.read();
  }
  
  image(video, 0, 0);
}

...

Grundsätzlich lassen sich alle Filter und Effekte, welche wir auf statische Bilder angewendet haben auch auf Video-Sourcen anwenden.

Pixelate

Image Added

Das folgende Beispiel verwendet den den "Pixelate" filter Filter um das Video grober aufzulösen:

Code Block
titleBeispiel
collapsetrue
import processing.video.*;
Capture video;

int pixelSize = 20;

void setup() {
  size(640, 480);
  video = new Capture(this, width, height, 30);
  video.start();
}

void draw() {
  if (video.available()) {
    video.read();
  }
  
  for(int x=0; x<width; x+=pixelSize) {
    for(int y=0; y<height; y+=pixelSize) {
      int loc = x+y*width;
      
      color c = video.pixels[loc];
      
      fill(c);
      noStroke();
      rect(x, y, pixelSize, pixelSize);
    }
  }
}

...


Threshold

Image Added

Das folgende Beispiel arbeitet mit einem Grenzwert und zeigt die Pixel entweder Schwarz oder Weiss dar:

Code Block
titleBeispiel
collapsetrue
import processing.video.*;
Capture video;

int threshold = 100;

void setup() {
  size(640, 480);
  video = new Capture(this, width, height, 30);
  video.start();
}

void draw() {
  if (video.available()) {
    video.read();
  }
  
  loadPixels();
  
  for(int x=0; x<width; x++) {
    for(int y=0; y<height; y++) {
      int loc = x+y*width;
      
      if(brightness(video.pixels[loc])<threshold) {
        pixels[loc] = color(255);
      } else {
        pixels[loc] = color(0);
      }
    }
  }

  updatePixels();
}

Processing_04_3Image Removed

...

Für Bilder gibt es auch schon eine Menge von vorgefertigten Filtern. Diese können unter diesem Link gefunden werden.

Spiegeln

Je nach Anwendung kann es von Vorteil sein, wenn man das Bild spiegelt. Vor allem bei Interaktionen vor einem Bildschirm macht dies Sinn. Im Beispiel “P04_4_Video_Kamerabild_spiegeln” ist gezeigt wie es geht. Im Prinzip drehen wir das komplette Video horizontal um 180°. Dies machen wir mit:

Code Block
languagejava
pushMatrix();
scale(-1,1);
image(video, -width, 0);
popMatrix();

Folgend das komplette Processing-Sketch:

Code Block
titleBeispiel
collapsetrue
import processing.video.*;
Capture video;

void setup() {
  size(640, 480);
  video = new Capture(this, width, height, 30);
  video.start();
}

void draw()  {
  if (video.available()) 
  {
    video.read();
  }
  
  pushMatrix();
  scale(-1,1);
  image(video, -width, 0);
  popMatrix();
}

Weitere Filter

Für Bilder gibt es auch schon eine Menge von vorgefertigten Filtern. Diese können unter diesem Link gefunden werden.

Weiteres