Kamera & Video
Um Videos darzustellen und die Kamera des Laptops anzusprechen muss eine Library importiert werden.
Zunächst wird also über Sketch > Library importieren die entsprechende Bibliothek runtergeladen. Danach wird am Anfang des Sketches folgendes Codestück eingefügt:
import processing.video.*;
Anschließend muss ein Capture-Objekt deklariert werden:
Capture video;
Zwei wichtige Klassen:
Capture um Live-Videos der Webcam abzuspielen
Movie um bereits existierenden Videoclips abzuspielen
video = new Capture(this, 800, 600);
drei Parameter: this, die Breite des erfassten Videos in Pixel sowie die Höhe.
man kann auch als 4. Parameter den Namen der Kamera angeben (das ist zB wichtig wenn man eine externe Kamera ansprechen möchte). Um die zur Verfügung stehenden Kameras anzuzeigen kann
println(Capture.list());
verwendet werden. Diese Funktion gibt eine Liste an verfügbaren Kameras an. Dann kann der Kameraname ganz einfach in Anführungszeichen ergänzt werden:
video = new Capture(this,1280, 720, „FaceTime HD Camera“);
video.start();
Die Darstellung des Videobildes wird durch die image()-Funktion aufgerufen:
image(video, 0, 0);
Zuvor haben wir bereits Events wie mousePressed() oder keyPressed() kennengelernt. Immer wenn eines dieser Ereignisse auftritt, wird die Funktion aufgerufen. Beim Ausgeben eines Videos gehört das Event captureEvent(Camera). Dieses tritt immer dann ein, wenn die Kamera ein neues Bild aufzeichnet und zur Verfügung stellt.
void captureEvent(Capture video) { video.read(); }
Code für die Ausgabe eines Videos:
// Importieren der Video-Library import processing.video.*; // Deklarieren des Capture-Objekts Capture video; void setup() { size(1280, 720); // Initialisieren des Capture-Objekts video = new Capture(this,1280, 720, "FaceTime HD Camera"); video.start(); } void draw() { // Darstellung des Video-Bildes im Ausgabefenster image(video, 0, 0); } void captureEvent(Capture video) { // Auslesen des verfügbaren Bildes der Kamera video.read(); }
Übungen
Erweitere nun den Code, der das Bild der Laptop Kamera ausgibt.
Der Farbwert jedes 30. Bildpunktes soll ausgelesen werden. Siehe dazu die Übung im Unterkapitel Bilder. Beachte hierbei, dass nun nicht img.get(x,y), sondern video.get(x,y); verwendet wird.
Verzichte auf die Darstellung des Videobildes durch image(video, 0, 0), sondern zeichne stattdessen Ellipsen mit dem vorhin ausgelesenen Farbwerten.
- Lösung
// Importieren der Video-Library import processing.video.*; // Deklarieren des Capture-Objekts Capture video; int radius = 30; void setup() { size(1280, 720); // Initialisieren des Capture-Objekts video = new Capture(this, 1280, 720); // Apple Facetime-Cam HD Auflösung video.start(); } void draw() { // zwei verschachtelte For-Schleifen um das Bild "abzutasten" for(int y=0; y < height; y += 30){ for(int x=0; x < width; x += 30){ // Aufnahme der Farbwerte in die Variable c color c = video.get(x,y); //diesen Farbwert c als Füllwert bestimmen fill(c); noStroke(); ellipse(x,y,radius, radius); } } } void captureEvent(Capture video) { // Auslesen des verfügbaren Bildes der Kamera video.read(); }
Erweitere nun den Code: Nun soll die Schrittweite, inder die Farbwerte ausgelesen werden flexibel über die Tasten ‚-‚ und ‚+‘ erhöht und derselbe Wert auch die Größe der Ellipse bestimmen.
- Lösung
// Importieren der Video-Library import processing.video.*; // Deklarieren des Capture-Objekts Capture video; float resX = 15; float resY = 15; void setup() { size(1280, 720); // Initialisieren des Capture-Objekts video = new Capture(this, 1280, 720); // Apple Facetime-Cam HD Auflösung video.start(); } void draw() { // zwei verschachtelte For-Schleifen um das Bild "abzutasten" for(int y=0; y <height; y += resX){ for(int x=0; x < width; x += resY){ // Aufnahme der Farbwerte in die Variable c color c = video.get(x,y); //diesen Farbwert c als Füllwert bestimmen fill(c); noStroke(); ellipse(x,y,resX, resY); } } } void captureEvent(Capture video) { // Auslesen des verfügbaren Bildes der Kamera video.read(); } void keyPressed(){ if(key == '+'){ resX += 1; resY += 1; } if(key == '-' && resX > 1){ resX -= 1; resY -= 1; } }
Erweitere nun erneut den Code: Nun soll es nicht nur eine Form geben, sondern per Tastendruck soll die Form geändert werden. Verwende hierzu beispielsweise Quadrate oder Linien.
- Lösung
// Importieren der Video-Library import processing.video.*; // Deklarieren des Capture-Objekts Capture video; int radius = 30; float resX = 15; float resY = 15; int shape; void setup() { size(1280, 720); // Initialisieren des Capture-Objekts video = new Capture(this, 1280, 720); // Apple Facetime-Cam HD Auflösung video.start(); } void draw() { // zwei verschachtelte For-Schleifen um das Bild "abzutasten" for(int y=0; y < height; y += resX){ for(int x=0; x < width; x += resY){ // Aufnahme der Farbwerte in die Variable c color c = video.get(x,y); //Shape 1 => Ellipsen if(shape ==1){ //diesen Farbwert c als Füllwert bestimmen fill(c); noStroke(); ellipse(x,y,resX, resY); }else if (shape == 2){ //Shape 2 => rect fill(c); noStroke(); rect(x,y,resX, resY); }else if (shape == 3){ //Shape 3 => line int xLine = x+int(random(-resX,resX)); int yLine = y+int(random(-resY,resY)); color cLine = video.get(xLine,yLine); stroke(cLine,255); strokeWeight(resX); line(xLine,yLine, x+random(resX), y+random(resY)); } } } } void captureEvent(Capture video) { // Auslesen des verfügbaren Bildes der Kamera video.read(); } void keyPressed(){ if(key == '+'){ resX += 1; resY += 1; } if(key == '-' && resX > 1){ resX -= 1; resY -= 1; } if(key == '1'){ shape = 1; } if(key == '2'){ shape = 2; } if(key == '3'){ shape = 3; } }
Code Inspiration von Andreas Pirchner.