Comment utiliser javacv directement dans Processing - Mon Club-Elec

publicité
Comment utiliser javacv directement dans Processing ?
Par X. HINAULT – Septembre 2011 – www.mon-club-elec.fr
Intro
> En, fait, la façon la plus simple d'utiliser javacv dans Processing (testé avec Processing 1-5) est d'utiliser directement
les .jar de la librairie dans Processing. Le truc réside dans la façon de nommer son répertoire javacv de façon à ce
qu'il soit bien pris en compte comme une librairie par Processing.
> On suppose ici que vous avez au préalable installer la dernière version d'OpenCV sur votre ordinateur.
Procédure :
> Télécharger les .jar de javacv ici :http://code.google.com/p/javacv/downloads/list (choisir le javacv-bin xxx)
> Extraire l'archive.
> ensuite dans le répertoire des librairies de processing ({RepertoireProcessing}/mode/java/libraries/), créer un
répertoire javacv (tout en minuscule) et un sous répertoire library en minuscule aussi (+++). Coller dans ce répertoire
l'ensemble des fichiers *.jar obtenus lors de la décompression de l'archive.
> Voilà, c'est tout !
Programme de test :
> Relancer Processing, aller dans Sketch > Import Library > javacv ce qui ajoute les lignes suivantes au programme :
import com.googlecode.javacv.*;
import com.googlecode.javacv.cpp.* ;
> ensuite on peut accéder aux fonctions javacv en la faisant précéder du nom de la sous classe dans laquelle elle se
trouve. Ainsi, pour créer un objet IplImage, on fera opencv_core.IplImage. La documentation de la librairie javacv est
finalement celle de la librarie opencv et ne peut pas être détaillée ici... cette librairie dispose effectivement de très
très nombreuses fonctions...
> Voici un exemple simple de code Processing qui fonctionne (et doit fonctionner si vous avez suivi la procédure cidessus) :
import com.googlecode.javacv.*;
import com.googlecode.javacv.cpp.*;
import java.awt.image.BufferedImage;
PImage imgDest;
void setup() {
size(320, 240);
String cheminFichier="/home/hinault/Bureau/trans/monimage.png";
//---- appel direct des fonctions de la librairie javacv ---//--- chargement d'un fichier image
opencv_core.IplImage opencvImgSrc= opencv_highgui.cvLoadImage(cheminFichier);
//opencv_core.CvSize mySize=opencv_core.cvSize(320,240); // crée objet CvSize
//opencv_core.IplImage opencvImgSrc= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); //
crée une image IplImage 32F, 4 canaux
//opencvImgSrc= opencv_highgui.cvLoadImage(cheminFichier);
//--- création d'une image IplImage --//opencv_core.CvSize mySize=opencv_core.cvSize(320,240); // crée objet CvSize
opencv_core.CvSize mySize=opencvImgSrc.cvSize(); // récupère la taille de l'image
//opencv_core.IplImage opencvImgDest= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_16S, 3); //
crée une image IplImage 8 bits, 4 canaux
opencv_core.IplImage opencvImgDest= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); // crée
une image IplImage , 3 canaux
//--- application d'effet opencv --opencv_imgproc.cvSmooth(opencvImgSrc, opencvImgDest, opencv_imgproc.CV_GAUSSIAN, 3); // applique un effet
Flou gaussien
//============ récupérer une image openCV dans Processing =====
//--- récupérer l'objet IplImage dans un BufferedImage
BufferedImage bufImg=opencvImgDest.getBufferedImage(); // récupère l'image
//---- créer un PImage --PImage img = createImage(320,240, PConstants.RGB);
//PImage img=loadImage(filename);
//img=new PImage(bufImg); //--- çà ne fonctionne pas...
// charge les pixels de l'image buffer dans img.pixels
bufImg.getRGB(0, 0, 320, 240, img.pixels, 0, 320);
img.updatePixels();
image(img,0,0); // affiche l'image
}
void draw() {
}
> Si ce programme s'exécute correctement, c'est tout bon : on peut directement appeler des fonctions openCV via
javacv dans Processing !! A présent, il ne vous reste plus qu'à suivre les nombreux programmes de test proposés sur ce
site.
Téléchargement