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" : Transformer un IplImage RGB en un IplImage en niveaux de gris

Explications

  • Dans ce programme, on convertit un objet IplImage 8UC3 (8 bits non signés, 3 canaux) en objet IplImage 8UC1 (8 bits non signés, 1 canal), ce qui revient à une conversion en niveau de gris.
  • Le truc : un faisant la manipulation en sens inverse, c'est l'IplImage 8UC3 de départ qui se retrouve lui-même convertit en niveaux de gris avec les 3 canaux identiques.

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


// Programme processing
// généré avec le générateur de code Processing
// du site www.mon-club-elec.fr
// par X. HINAULT - tous droits réservés

// Programme écrit le : 8/10/2011.

// ------- Licence du code de ce programme : GPL v3-----
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

/////////////// Description du programme ////////////
// Utilise la librairie javacv qui implémente les fonctions natives d'OpenCV en Java

// XXXXXXXXXXXXXXXXXXXXXX ENTETE DECLARATIVE XXXXXXXXXXXXXXXXXXXXXX

// inclusion des librairies utilisées

import com.googlecode.javacv.*; // importe librairie javacv
import com.googlecode.javacv.cpp.*; // importe librairie javacv.cpp
// librairie javacv par Samuel Audet : http://code.google.com/p/javacv/
// javacv implémente en Java les centaines de fonctions natives de la librairie OpenCV (2500 algorithmes) !
// les fonctions de javacv sont dès lors facilement utilisables "in line" dans le code Processing
// la librairie doit simplement être présente dans le répertoire Processing /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 com.googlecode.javacpp.*; // importe librairie javacpp (à distinguer de javacv.cpp.*)
// librairie javacpp par Samuel Audet : http://code.google.com/p/javacpp/
// la librairie doit être présente dans le même répertoire /mode/java/libraries/javacv/library/

//-- autres librairies utiles avec javacv --
import java.awt.image.BufferedImage; // importe la classe java BufferedImage
import java.nio.*; // pour classe ByteBuffer

import java.awt.Rectangle; // importe la classe Rectangle du langage Java
// l'objet rectangle fournit les champs x,y du centre et hauteur/largeur (height/width) du rectangle

// déclaration objets

PImage imgSrc, imgDest; // déclare un/des objets PImage (conteneur d'image Processing)

// déclare un/des objets IplImage (conteneur image natif librairie OpenCV) utiles
opencv_core.IplImage iplImgSrc, iplImgDest, iplImgGray, iplImgMask, iplImgTrans;

// déclaration variables globales

//------ déclaration des variables de couleur utiles ----
int jaune=color(255,255,0);
int vert=color(0,255,0);
int rouge=color(255,0,0);
int bleu=color(0,0,255);
int noir=color(0,0,0);
int blanc=color(255,255,255);
int bleuclair=color(0,255,255);
int violet=color(255,0,255);

// variable pour la taille de la capture video
int widthCapture=320; // largeur capture
int heightCapture=240; // hauteur capture
int fpsCapture=20; // framerate (image/secondes) pour la capture video


// XXXXXXXXXXXXXXXXXXXXXX  Fonction SETUP XXXXXXXXXXXXXXXXXXXXXX

void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage

        // ---- initialisation paramètres graphiques utilisés
        colorMode(RGB, 255,255,255); // fixe format couleur R G B pour fill, stroke, etc...
        fill(0,0,255); // couleur remplissage RGB - noFill() si pas de remplissage
        stroke (0,0,0); // couleur pourtour RGB - noStroke() si pas de pourtour
        rectMode(CORNER); // origine rectangle : CORNER = coin sup gauche | CENTER : centre
        imageMode(CORNER); // origine image : CORNER = coin sup gauche | CENTER : centre
        ellipseMode(CENTER); // origine cercles / ellipses : CENTER : centre (autres : RADIUS, CORNERS, CORNER
        //strokeWeight(0); // largeur pourtour
        frameRate(30);// Images par seconde - The default rate is 60 frames per second

        // --- initialisation fenêtre de base ---
        size(widthCapture,heightCapture); // ouvre une fenêtre xpixels  x ypixels
        background(0,0,0); // couleur fond fenetre



// --- initialisation des objets et fonctionnalités utilisées ---

  //======== Code exemple utilisation javacv "in line" =========

  //--- chargement d'un fichier image
  String cheminFichier="/home/hinault/Bureau/trans/monimage.png"; // chemin absolu du fichier utilisé
  iplImgSrc= opencv_highgui.cvLoadImage(cheminFichier); // chargement d'un fichier dans l'IplImage

  opencv_core.CvSize mySize=iplImgSrc.cvSize(); // récupère la taille de l'image - Cvsize est un objet contenant 2 valeurs

  //--- création d'une image IplImage en niveaux de gris  ---
  iplImgGray= opencv_core.cvCreateImage(mySize, opencv_core.IPL_DEPTH_8U, 1); // crée une image IplImage même taille, mais 8U et 1 canal


  //--- création d'une image IplImage destination ---
  iplImgDest= opencv_core.cvCreateImage(mySize, iplImgSrc.depth(), iplImgSrc.nChannels()); // crée une image IplImage idem

  opencv_imgproc.cvCvtColor(iplImgSrc, iplImgGray, opencv_imgproc.CV_RGB2GRAY); // bascule en niveaux de gris

  opencv_imgproc.cvCvtColor(iplImgGray, iplImgDest, opencv_imgproc.CV_GRAY2RGB); // rebascule en RGB ce qui convertit l'image RGB en niveaux de gris ( 3 canaux idem)

  //--- affiche IplImage dans Processing via un PImage ---
  //imgDest=toPImage(iplImgGray); // transfère IplImage dans PImage
  imgDest=toPImage(iplImgDest); // transfère IplImage dans PImage
  image(imgDest,0,0); // affiche le PImage



} // fin fonction Setup

// XXXXXXXXXXXXXXXXXXXXXX Fonction Draw XXXXXXXXXXXXXXXXXXXX

void  draw() { // fonction exécutée en boucle


        // while(true); // stoppe boucle draw

} // fin de la fonction draw()

// XXXXXXXXXXXXXXXXXXXXXX Autres Fonctions XXXXXXXXXXXXXXXXXXXXXX

//---- fonction toPimage : transfère un IplImage dans un PImage

PImage toPImage (opencv_core.IplImage iplImgIn) { // reçoit un IplImage et renvoie un PImage

  //--- récupérer l'objet IplImage dans un BufferedImage
  BufferedImage bufImg=iplImgIn.getBufferedImage(); // récupère IplImage dans un objet BufferedImage transitoire

  //---- créer un PImage ---
  PImage imgOut = createImage(iplImgIn.width(),iplImgIn.height(), RGB); // création d'un PImage de même taille que IplImage

  // charge les pixels de l'image buffer dans le tableau  imgOut.pixels du PImage
  bufImg.getRGB(0, 0, iplImgIn.width(), iplImgIn.height(), imgOut.pixels, 0,iplImgIn.width());

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

  return(imgOut); // renvoie le PImage

} // fin toPImage



//XXXXXXXXXXXXXXXXXX Fin du programme XXXXXXXXXXXXXXXXX