Le traitement d’image est une tâche complexe qui nécessite des outils spécialisés pour obtenir des résultats précis et satisfaisants. La bibliothèque JavaCV offre une solution complète pour le traitement d’image, en particulier l’utilisation d’un objet IplImage. Cet objet est un conteneur d’image OpenCV qui permet de manipuler des images numériques et de les traiter de manière efficace. Dans cet article, nous allons examiner en détail l’utilisation de l’objet IplImage et comment il peut être utilisé avec le langage de programmation Java et le framework Processing.
Processing : Javacv « inline » : Utiliser un objet IplImage (conteneur Image OpenCV).

Explications
- Dans ce programme, on teste l’utilisation d’un objet IplImage dans Processing en utilisant les fonctions javacv directement dans le programme Processing !
- Ici, on charge un fichier dans un objet IplImage, on affiche les caractéristique de l’objet, on crée un second objet IplImage ayant les mêmes caractéristiques, on réalise une copie du premier dans le second, puis on transfère l’objet IplImage dans un PImage via un objet BufferedImage. On termine par l’affichage du PImage.
- L’objet IplImage est un objet comparable à un PImage. Pour plus de détails, voir : http://opencv.itseez.com/modules/core/doc/old_basic_structures.html#iplimage
Matériel et configuration utilisés
- PC Intel Core Quad 2.33 Ghz
- Ubuntu 10.04 LTS
- Processing 1-5
- OpenCV 2.3.1
- librairie javacv
Ressources utiles
- La documentation de la librairie OpenCV : http://opencv.itseez.com/
- La dernière version de la librairie OpenCV : Compilation/Installation d’OpenCV 2.3.1 sous Ubuntu 10.04 – PDF
- La librairie javacv, implémentation Java de la librairie openCV : http://code.google.com/p/javacv/ Cette librairie implémente en langage Java l’ensemble des fonctions et objets de la librairie openCV (écrite en C/C++) en langage Java. Cette librairie permet d’accéder relativement simplement aux fonctions d’openCV directement dans Processing notamment. Voir : Installation de la librairie javacv dans Processing – PDF
- Ma javadoc de la librairie javacv
Le programme
// Tous droits réservés – Code sous licence GPLv3
// Octobre 2011
// test simple des fonctions javacv dans un programme Processing
// ce programme montre comment accéder aux propriétés de l’objet IplImage
import com.googlecode.javacv.*; // importe librairie javacv
import com.googlecode.javacv.cpp.*; // importe librairie javacv
// librairie javacv par Samuel Audet : http://code.google.com/p/javacv/
// javacv implémente en Java les centaines de fonctions de la librairie OpenCV !
// la librairie doit être présente dans le répertoire /mode/java/libraries/javacv/library/
// NB : La librairie javacv est basée sur la librairie javacpp du même auteur : http://code.google.com/p/javacpp/
import java.awt.image.BufferedImage; // importe la classe java BufferedImage
PImage imgDest; // crée un objet PImage
void setup() {
size(320, 240);
String cheminFichier=« /home/hinault/Bureau/trans/monimage.png »; // chemin absolu du fichier utilisé
//—- appel direct des fonctions de la librairie javacv —-
//— chargement d’un fichier image
opencv_core.IplImage iplImgSrc; // création d’un objet opencv IplImage = matrice d’image
//iplImgSrc= opencv_highgui.cvLoadImage(cheminFichier); // chargement d’un fichier dans l’IplImage
iplImgSrc= opencv_highgui.cvLoadImage(cheminFichier,1); // chargement d’un fichier dans l’IplImage – variante qui fixe le type d’image chargée
// 1 : image RGB (3 canaux) , 0: image gray (1 canal), -1 : idem à la source
//— création d’une image IplImage destination —
opencv_core.CvSize mySize=iplImgSrc.cvSize(); // récupère la taille de l’image – Cvsize est un objet contenant 2 valeurs
// static opencv_core.IplImage cvLoadImage(java.lang.String filename)
//opencv_core.IplImage iplImgDest= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 3); // crée une image IplImage 8bits , 3 canaux
opencv_core.IplImage iplImgDest= opencv_core.cvCreateImage(mySize,iplImgSrc.depth() , iplImgSrc.nChannels()); // crée une image IplImage identique à iplImgSrc
// — le champ opencv_core.IPL_DEPTH_8U correspond à 1 codage 8 bits de l’image
// — on utilise ici 3 canaux —
// — à noter : on pourrait utiliser la fonction iplImgSrc.depth() pour utiliser le même nombre de canaux que iplImgSrc
//—— affichage des caractéristiques de l’objet IplImage
println(« — caractéristiques de l’objet IplImage —« );
println(« Taille : « + iplImgSrc.width() + » x « + iplImgSrc.height() + » pixels. »);
println(« Nombre de canaux : « + iplImgSrc.nChannels()+ » canaux. »);
println(« Codage sur « + iplImgSrc.depth()+ » bits. »);
//— copie l’objet IplImage dans un autre objet IplImage —
opencv_core.cvCopy(iplImgSrc, iplImgDest);
// — attention : src et dst doivent avoir la même taille, le même nombre de canaux (nChannels) et être codées sur le même nombre de bits (depth)
//============ récupérer une image openCV dans Processing =====
//— récupérer l’objet IplImage dans un BufferedImage – objet utilisé pour « passer » l’image de opencv vers Processing
BufferedImage bufImg=iplImgDest.getBufferedImage(); // récupère IplImage dans un objet BufferedImage
//—- créer un PImage —
PImage img = createImage(iplImgDest.width(),iplImgDest.height(), RGB); // création d’un PImage
// charge les pixels de l’image buffer dans le tableau img.pixels du PImage
bufImg.getRGB(0, 0, iplImgDest.width(), iplImgDest.height(), img.pixels, 0, 320);
img.updatePixels(); // met à jour le PImage
image(img,0,0); // affiche le PImage
}
void draw() {
}
Articles Liés
- Processing : Javacv "inline" : ..
Le traitement des données est un domaine en pleine expansion et de plus en plus…
- Processing : OpenCV : librairie javacvPro : ...
Processing est un langage de programmation open source qui permet aux développeurs de créer des…
- Processing : OpenCV : librairie javacvPro : Programme minimum.
Le traitement d'image est un domaine qui a connu une croissance exponentielle ces dernières années.…