View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Outils > 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

Le programme


// Par X. HINAULT - www.mon-club-elec.fr
// 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() {


}