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" : Programme simple de test.

Explications

  • Dans ce programme, on réalise un simple appel de quelques fonctions javacv dans un programme Processing ce qui permet de faire "the proof of concept", la preuve du concept. Ici, le programme affiche dans un PImage un fichier chargé via openCV dans un IplImage (objet conteneur d'image de la librairie Opencv).
  • On suppose ici que OpenCv est installé sur votre ordinateur et que vous avez aussi installé la librairie javacv dans votre répertoire Processing :
  • Tout d'abord, il faut importer les librairies javacv et javacvcpp :
import com.googlecode.javacv.*;
import com.googlecode.javacv.cpp.*;
  • Ensuite, on appelle les fonctions javacv en les faisant précéder du nom de la classe où elles se trouvent. Par exemple :
  //--- chargement d'un fichier image
  opencv_core.IplImage opencvImgSrc; // création d'un objet opencv IplImage = matrice d'image
  opencvImgSrc= opencv_highgui.cvLoadImage(cheminFichier); // chargement d'un fichier dans l'IplImage
  • Ici, le programme charge un fichier image dans un objet IplImage (conteneur image openCV), lui applique une fonction de flou Gaussien et le transfère dans un objet PIMage qui est ensuite affiché simplement. On pose ainsi les bases d'une utilisation d'Opencv dans Processing.
  • Difficile de faire plus simple : pas de compilation et test immédiat des fonctions natives OpenCV dans Processing !
  • En fait, c'est tout simplement prometteur : toutes les fonctions natives d'openCV disponibles deviennent ainsi potentiellement directement accessibles et utilisables au sein d'un programme Processing !! Reste à prendre en main les subtilités de la librairie OpenCV... mais pas à pas, tout est possible !

Matériel et configuration utilisés

  • PC Intel Core Quad 2.33 Ghz
  • Ubuntu 10.04 LTS
  • Processing 1-5
  • librairie javacv

Ressources utiles

Le programme


// Par X. HINAULT - www.mon-club-elec.fr
// Tous droits réservés - Code sous licence GPLv3
// Septembre 2011

// test simple des fonctions javacv dans un programme Processing
// ce programme charge un fichier dans un objet IplImage
// applique un filtre flou openCV
// copie l'objet IplImage dans un objet PImage
// affiche le résultat

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
  opencvImgSrc= opencv_highgui.cvLoadImage(cheminFichier); // chargement d'un fichier dans l'IplImage


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

  //--- application d'effet opencv sur l'image source et enregistrer dans l'image destination ---
  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 IplImage dans un objet BufferedImage


  //---- créer un PImage ---
  PImage img = createImage(opencvImgDest.width(),opencvImgDest.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, opencvImgDest.width(), opencvImgDest.height(), img.pixels, 0, 320);

  img.updatePixels(); // met à jour le PImage

  image(img,0,0); // affiche le PImage

}

void draw() {


}