Le traitement d’image est une tâche complexe qui nécessite des outils spécialisés. La bibliothèque JavaCV offre une solution puissante et flexible pour le traitement d’image. Elle permet aux développeurs de manipuler des images en utilisant le conteneur IplImage. Dans cet article, nous allons voir comment redimensionner un objet IplImage avec JavaCV « inline ». Nous verrons comment utiliser les fonctionnalités de JavaCV pour redimensionner une image et comment cela peut être utile dans le traitement d’image.
Processing : Javacv « inline » : Redimmensionner un objet IplImage (conteneur Image OpenCV).

Explications
- Dans ce programme, on réalise le redimensionnement d’un objet IplImage dans Processing toujours 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 une taille multipliée par un coefficient, on réalise une copie du premier dans le second à l’aide d’une fonction de redimensionnement, puis on transfère l’objet IplImage obtenu dans un PImage via un objet BufferedImage. On termine par l’affichage du PImage.
- On utilise ici, via javacv, la version C de la fonction cvResize() : http://opencv.willowgarage.com/documentation/c/imgproc_geometric_image_transformations.html#resize
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 redimmensionner un objet IplImage
// en accédant 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() {
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
//— paramètre agrandissement
float coeff=2.5; // coefficient de grandissement
size(int(iplImgSrc.width()*coeff),int(iplImgSrc.height()*coeff));
frameRate(15); // fréquence affichage Processing
//— 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
opencv_core.CvSize mySize=opencv_core.cvSize(int(iplImgSrc.width()*coeff),int(iplImgSrc.height()*coeff)); // nouvelle taille
// 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
// alternative – utilise largeur/hauteur de l’image
opencv_core.IplImage iplImgDest= opencv_core.cvCreateImage(mySize,iplImgSrc.depth() , iplImgSrc.nChannels()); // crée une image IplImage basée sur nouvelle taille
// — 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 source —« );
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)
//— redimensionne IplImage source vers IplImagDestination
opencv_imgproc.cvResize(iplImgSrc, iplImgDest);
//opencv_imgproc.cvResize(iplImgSrc, iplImgDest, opencv_imgproc.CV_INTER_CUBIC); // variante – utilise interpolation
//—— affichage des caractéristiques de l’objet IplImage
println(« — caractéristiques de l’objet IplImage de destination —« );
println(« Taille : « + iplImgDest.width() + » x « + iplImgDest.height() + » pixels. »);
println(« Nombre de canaux : « + iplImgDest.nChannels()+ » canaux. »);
println(« Codage sur « + iplImgDest.depth()+ » bits. »);
//============ 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);
bufImg.getRGB(0, 0, iplImgDest.width(), iplImgDest.height(), img.pixels, 0, iplImgDest.width());
img.updatePixels(); // met à jour le PImage
image(img,0,0); // affiche le PImage
}
void draw() {
}
Articles similaires:
- Processing : Javacv « inline » : Utiliser un objet IplImage (conteneur Image OpenCV).
- Processing : Javacv « inline » : Programme simple de test.
- Processing : Javacv « inline » : Transformer un IplImage RGB en un IplImage en niveaux de gris
- Processing : Javacv « inline » : Convertir un IplImage 16S (16 bits non signés) en un IplImage 8U (8 bits non signés)
- Processing : Javacv « inline » : Extraction des canaux RGB d’un objet IplImage et reconstruction de l’image à l’aide des canaux RGB individuels.
Articles Liés
- Processing : Javacv "inline" : Utiliser un objet IplImage (conteneur Image OpenCV).
Le traitement d'image est une tâche complexe qui nécessite des outils spécialisés pour obtenir des…
- 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…