Processing 2.0
Um mit OpenCV arbeiten zu können, muss man erst die Library impotieren, dann ein OpenCV Objekt deklarieren und intitialisieren.
import monclubelec. javacvPro.*
OpenCV opencv;
in setup():
opencv = new OpenCV(this);
OpenCV arbeitet mit Puffern. Beim Aufruf der allocate() Funktion werden die unten im Bild dargestellten Puffer erstellt.

Diese Buffer sind dann auf unterschiedliche Arten ansprechbar. Einfachste Art: Man zeigt das OpenCV Bildobjekt im Programmfenster:
opencv.copy(img); // kopiert PImage in den OpenCV Buffer
image(opencv.image(), 0, 0); //zeichnet das OpenCV Bildobjekt links oben
Will man auf das Graustufen-Bild zugreifen:
opencv.copyToGray(img);
image(opencv.getBufferGray(), 0, 0);
Ausgabe der Kanalbilder RGB:
opencv.copy(img); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
//die Umkehroperation wäre hier mergerRGB()
image(opencv.getBufferR(),0, 0);// zeigt das Bild des Rot-Kanals
Es besteht auch die Möglichkeit, diese Buffer separat für verschiedene Bildgrößen zu erstellen. Z. B. um Objekte zu vergleichen.
opencv.allocateBuffer( width, height);
opencv.allocateMemory( width, height);
opencv.allocateMemory2( width, height);
Mit diversen remember()-, copyTo()-, remember2()-, restore()- und getMemory()- Funktionen kann man diese Buffer nutzen, um Bilder zwischen zu speichern.
Hier ein Überblick von: http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php?n=Main.Presentation.

Beispiel: Einfache Bildmanipulation unter Verwendung der OpenCV Buffer und Filter
// Verändert von Thomas Koberger
// im Original von:
// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - octobre 2011
// Tous droits réservés - Licence GPLv3
/**
* changing strokeweight and strokecaps on diagonals in a grid
*
* MOUSE
*
*
* KEYS
* r : show Red Channel Image
* g : show Green Channel Image
* b : show Blue Channel Image
* w : show Gray Image
* n : show original Image
* h : flip Image horizontaly
* v : flip Image verticaly
* i : invert Image
* 1 : apply "blur" Filter
* 2 : increase Brightness
* 3 : decrease Brightness
* 4 : increase Contrast
* 5 : decrease Contrast
* 6 : multiply Red
* 7 : multiply Green
* 8 : multiply Blue
* 9 : smooth Image
* s : save png
*/
import monclubelec.javacvPro.*;
import java.util.*;
PImage img;
String url="http://kobe.bplaced.net/processing/016_16.JPG";
OpenCV opencv; // deklariert ein OpenCV Objekt
void setup() {
// Lädt die Bilddatei
img=loadImage(url, "jpg");
// initialisiert OpenCV ---
opencv = new OpenCV(this);
opencv.allocate(img.width, img.height); // initialisiert die Buffer von OpenCV
opencv.copy(img); // lädt die PImage Datei in den OpenCV Buffer
size (opencv.width(), opencv.height());
// gibt das Bild aus
image(opencv.getBuffer(), 0, 0);
noLoop();
}
void draw() {
noLoop();
}
void keyReleased() {
if (key == 's' || key == 'S') saveFrame(timestamp()+"_##.png");
if (key == 'r') {
opencv.copy(img); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferR(), 0, 0);// zeigt das Bild des Rot-Kanals
loop();
}
if (key == 'g') {
opencv.copy(img); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferG(), 0, 0);// zeigt das Bild des Grün-Kanals
loop();
}
if (key == 'b') {
opencv.copy(img); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferB(), 0, 0);// zeigt das Bild des Blau-Kanals
loop();
}
if (key == 'w') {
opencv.copyToGray(img);
image(opencv.getBufferGray(), 0, 0);
loop();
}
if (key == 'n') {
opencv.copy(img);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == 'h') {
opencv.flip(opencv.HORIZONTAL);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == 'v') {
opencv.flip(opencv.VERTICAL);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == 'i') {
opencv.invert();
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '1') {
opencv.blur(10);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '2') {
opencv.brightness(+10);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '3') {
opencv.brightness(-10);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '4') {
opencv.contrast(+10);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '5') {
opencv.contrast(-10);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '6') {
opencv.multiply(0.9, 1, 1);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '7') {
opencv.multiply(1, 0.9, 1);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '8') {
opencv.multiply(1, 1, 0.9);
image(opencv.getBuffer(), 0, 0);
loop();
}
if (key == '9') {
opencv.smooth(3);
image(opencv.getBuffer(), 0, 0);
loop();
}
}
// timestamp
String timestamp() {
Calendar now = Calendar.getInstance();
return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now);
}
Beispiel: Alles wie oben, nur mit Video aus Datei
// Verändert von Thomas Koberger
// im Original von:
// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - octobre 2011
// Tous droits réservés - Licence GPLv3
/**
* changing strokeweight and strokecaps on diagonals in a grid
*
* MOUSE
*
*
* KEYS
* r : show Red Channel Image
* g : show Green Channel Image
* b : show Blue Channel Image
* w : show Gray Image
* n : show original Image
* h : flip Image horizontaly
* v : flip Image verticaly
* i : invert Image
* 1 : apply "blur" Filter
* 2 : increase Brightness
* 3 : decrease Brightness
* 4 : increase Contrast
* 5 : decrease Contrast
* 6 : multiply Red
* 7 : multiply Green
* 8 : multiply Blue
* 9 : smooth Image
* s : save png
*/
import monclubelec.javacvPro.*;
import processing.video.*;
import java.util.*;
// Für WebCam:
Capture cam1;
//Movie cam1;
PImage img, imgSrc;
char mode='n';
OpenCV opencv; // deklariert ein OpenCV Objekt
void setup() {
// Für WebCam:
cam1= new Capture(this, 1280, 720);
//cam1 = new Movie(this, "em.mpg");
// für WebCam auskommentieren:
cam1.start();
// initialisiert OpenCV ---
opencv = new OpenCV(this);
//Vorsicht: bei der Arbeit mit einer Datei muss die Größe genau passen!!!
opencv.allocate(1280, 720);
// Für WebCam:
// opencv.allocate(cam1.getSourceWidth(), cam1.getSourceHeight()); // initialisiert die Buffer von OpenCV
size (opencv.width(), opencv.height());
}
void draw() {
// Dateien und die WebCam brauchen etwas Zeit zum Laden
if (cam1.available()) {
// Einzelne Frames werden gelesen
cam1.read();
switch (mode) {
case 'n':
opencv.copy(cam1);
image(opencv.getBuffer(), 0, 0);
break;
case 'r':
opencv.copy(cam1); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferR(), 0, 0);// zeigt das Bild des Rot-Kanals
break;
case 'g':
opencv.copy(cam1); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferG(), 0, 0);// zeigt das Bild des Grün-Kanals
break;
case 'b':
opencv.copy(cam1); // kopiert PImage in den OpenCV Buffer
opencv.extractRGB(); //extrahiert die Kanäle
image(opencv.getBufferB(), 0, 0);// zeigt das Bild des Blau-Kanals
break;
case 'w':
opencv.copyToGray(cam1);
image(opencv.getBufferGray(), 0, 0);
break;
case 'h':
opencv.copy(cam1);
opencv.flip(opencv.HORIZONTAL);
image(opencv.getBuffer(), 0, 0);
break;
case 'v':
opencv.copy(cam1);
opencv.flip(opencv.VERTICAL);
image(opencv.getBuffer(), 0, 0);
break;
case 'i':
opencv.copy(cam1);
opencv.invert();
image(opencv.getBuffer(), 0, 0);
break;
case '1':
opencv.copy(cam1);
opencv.blur(30);
image(opencv.getBuffer(), 0, 0);
break;
case '2':
opencv.copy(cam1);
opencv.brightness(+30);
image(opencv.getBuffer(), 0, 0);
break;
case '3':
opencv.copy(cam1);
opencv.brightness(-30);
image(opencv.getBuffer(), 0, 0);
break;
case '4':
opencv.copy(cam1);
opencv.contrast(+30);
image(opencv.getBuffer(), 0, 0);
break;
case '5':
opencv.copy(cam1);
opencv.contrast(-30);
image(opencv.getBuffer(), 0, 0);
break;
case '6':
opencv.copy(cam1);
opencv.multiply(0.7, 1, 1);
image(opencv.getBuffer(), 0, 0);
break;
case '7':
opencv.copy(cam1);
opencv.multiply(1, 0.7, 1);
image(opencv.getBuffer(), 0, 0);
break;
case '8':
opencv.copy(cam1);
opencv.multiply(1, 1, 0.7);
image(opencv.getBuffer(), 0, 0);
break;
case '9':
opencv.copy(cam1);
opencv.smooth(3);
image(opencv.getBuffer(), 0, 0);
break;
}
}
}
void keyReleased() {
if (key == 's' || key == 'S') saveFrame(timestamp()+"_##.png");
if (key == 'r') {
mode='r';
}
if (key == 'g') {
mode='g';
}
if (key == 'b') {
mode='b';
}
if (key == 'w') {
mode='w';
}
if (key == 'n') {
mode='n';
}
if (key == 'h') {
mode='h';
}
if (key == 'v') {
mode='v';
}
if (key == 'i') {
mode='i';
}
if (key == '1') {
mode='1';
}
if (key == '2') {
mode='2';
}
if (key == '3') {
mode='3';
}
if (key == '4') {
mode='4';
}
if (key == '5') {
mode='5';
}
if (key == '6') {
mode='6';
}
if (key == '7') {
mode='7';
}
if (key == '8') {
mode='8';
}
if (key == '9') {
mode='9';
}
}
// timestamp
String timestamp() {
Calendar now = Calendar.getInstance();
return String.format("%1$ty%1$tm%1$td_%1$tH%1$tM%1$tS", now);
}














