View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : extractRGB()


Description

  • Cette fonction copie dans 3 buffers dédiés sous forme d'une image mono-canal les 3 canaux de l'image RGB présente dans le buffer principal. Les buffers destination sont logiquement nommés bufferR, bufferG et bufferB.
  • Une image devra donc avoir été chargée au préalable dans le buffer principal à l'aide de la fonction loadImage() ou copy().
  • Cette fonction peut également recevoir en paramètre un objet javacv IplImage (conteneur image natif OpenCV). (usage avancé)
  • Voir également : mergeRGB(), getBufferR(), getBufferG(), getBufferB()

Déclaration source java

public void extractRGB()
public void extractRGB(opencv_core.IplImage iplImgIn)

Syntaxe

opencv.extractRGB();
opencv.extractRGB(iplImg);

Paramètres

  • opencv : un objet OpenCV déclaré avec le constructeur OpenCV.
  • iplImg : un objet IplImg javacv. (usage avancé)

Valeur renvoyée

Aucune. Les 3 buffers destination contiennent chacun une copie de chaque canal couleur de l'image de départ.

Exemple

L'exemple complet suivant est à copier dans Processing et est exécutable imédiatement si vous êtes connectés à internet :


// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - octobre 2011
// Tous droits réservés - Licence GPLv3

// Exemple fonction extractRGB()

import monclubelec.javacvPro.*; // importe la librairie javacvPro

PImage img;

String url="http://www.mon-club-elec.fr/mes_images/online/lena.jpg"; // String contenant l'adresse internet de l'image à utiliser

OpenCV opencv; // déclare un objet OpenCV principal

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

        //-- charge image utilisée ---
        img=loadImage(url,"jpg"); // crée un PImage contenant le fichier à partir adresse web

        //--- initialise OpenCV ---
        opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This
        opencv.allocate(img.width, img.height); // initialise les buffers OpenCv à la taille de l'image

        opencv.copy(img); // charge le PImage dans le buffer OpenCV

        //--- initialise fenêtre Processing
        size (opencv.width()*2, opencv.height()*2); // crée une fenêtre Processing de la 2xtaille du buffer principal OpenCV
        //size (img.width, img.height); // aalternative en se basant sur l'image d'origine

        //--- affiche image de départ ---        
        image(opencv.getBuffer(),0,0); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //--- opérations sur image ---
        opencv.extractRGB(); // extrait les canaux RGB et les copie dans les buffers RGB

        //--- affiche images finales ---
        image(opencv.getBufferR(),opencv.width(),0); // affiche le buffer rouge  OpenCV dans la fenêtre Processing

        image(opencv.getBufferG(),0,opencv.height()); // affiche le buffer vert OpenCV dans la fenêtre Processing

        image(opencv.getBufferB(),opencv.width(),opencv.height()); // affiche le buffer bleu OpenCV dans la fenêtre Processing

       noLoop(); // stop programme
}


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

}

 

Exemple webcam



// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - Mars 2012
// Tous droits réservés - Licence GPLv3

// Exemple fonction extractRGB()

import codeanticode.gsvideo.*; // importe la librairie vidéo GSVideo qui implémente GStreamer pour Processing (compatible Linux)
// librairie comparable à la librairie native vidéo de Processing (qui implémente QuickTime..)- Voir Reference librairie Video Processing
// cette librairie doit être présente dans le répertoire modes/java/libraries du répertoire Processing (1-5)
// voir ici : http://gsvideo.sourceforge.net/

import monclubelec.javacvPro.*; // importe la librairie javacvPro

PImage img;

GSCapture cam; // déclare un objet GSCapture représentant une webcam
// L'objet GSCapture étend PImage - se comporte comme un conteneur des frames issues de la webcam

OpenCV opencv; // déclare un objet OpenCV principal

int widthCapture=320; // largeur image capture
int heightCapture=240; // hauteur image capture
int fpsCapture=20; // framerate de Capture

int millis0=0; // variable mémorisation millis()

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

        //--- initialise fenêtre Processing
        size (widthCapture*2, heightCapture*2); // crée une fenêtre Processing de la 2xtaille du buffer principal OpenCV
        //size (img.width, img.height); // aalternative en se basant sur l'image d'origine
        frameRate(fpsCapture); // taux de rafraichissement de l'image

       //---- initialise la webcam ---
       cam = new GSCapture(this, widthCapture, heightCapture); // forme simplifiée
       //cam = new GSCapture(this, widthCapture, heightCapture,"v4l2src","/dev/video1", fpsCapture); // Initialise objet GSCapture désignant webcam - forme complète

        //--- initialise OpenCV ---
        opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This
        opencv.allocate(widthCapture, heightCapture); // initialise les buffers OpenCv à la taille de l'image

        cam.start();  // démarre objet GSCapture = la webcam

}


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

// Code capture GSVideo

  if (cam.available() == true) { // si une nouvelle frame est disponible sur la webcam

        background(0);  // fond noir entre 2 images

        //------ gestion image webcam par GSCapture ------
        cam.read(); // acquisition d'un frame
        //image(cam1, 0, 0); // affiche image
        //set(0, 0, cam); // affiche image - plus rapide

        //------- gestion image par Opencv ----------

        //imgSrc=cam1.get(); // récupère l'image GS video dans Pimage
        //opencv.copy(imgSrc); // charge l'image dans le buffer openCV

        millis0=millis(); // mémorise millis()  
        opencv.copy(cam.get()); // autre possibilité - charge directement l'image GSVideo dans le buffer openCV
        println("Durée chargement buffer OpenCV=" + (millis()-millis0)+"ms.");

        //--- affiche image de départ avant opération sur image ---        
        image(opencv.getBuffer(),0,0); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //--- opérations sur image ---

        millis0=millis(); // mémorise millis()  

        opencv.extractRGB(); // extrait les canaux RGB et les copie dans les buffers RGB

        println("Durée traitement image par OpenCV=" + (millis()-millis0)+" ms.");

        //--- affiche images finales ---
        image(opencv.getBufferR(),opencv.width(),0); // affiche le buffer rouge  OpenCV dans la fenêtre Processing

        image(opencv.getBufferG(),0,opencv.height()); // affiche le buffer vert OpenCV dans la fenêtre Processing

        image(opencv.getBufferB(),opencv.width(),opencv.height()); // affiche le buffer bleu OpenCV dans la fenêtre Processing



  } // fin if available

} // fin draw

 

Les buffers images de la classe OpenCV

Présentation

  • La classe OpenCV de la librairie javacvPro crée automatiquement lors de l'initialisation (fonction allocate() ) plusieurs "buffers image" (mémoires images) qui permettent la manipulation simplifiées des images à l'aide des fonctions de la librairie avec OpenCV. La liste des buffers disponibles est la suivante :
    • le buffer principal, image à trois canaux RGB, sur lequel sont appliquées par défaut la plupart des fonctions de la librairie.
    • le buffer Gray, en niveaux de gris, monocanal
    • le buffer R, pouvant recevoir le canal rouge, monocanal.
    • le buffer G, pouvant recevoir le canal vert, monocanal.
    • le buffer B, pouvant recevoir le canal bleu, monocanal.
    • le buffer Memory, qui permet le stockage d'image 3 canaux (voir fonction remember() ).
    • le buffer Memory2, qui permet le stockage d'une image 3 canaux également (voir fonction remember2() ).

Vue d'ensemble des buffers Javacvpro

Initialisation des buffers

  • Tous les buffers sont initialisés et dimensionnés à la même taille à l'aide de la fonction allocate().
  • Pour une initialisation séparée avec des tailles différentes des buffers images et des buffers Memory et Memory2, utiliser les fonctions allocateBuffer() et/ou allocateMemory(), allocateMemory2().
  • Ceci sera particulièrement utile notamment dans le cas de l'utilisation des algorithmes de recherche de correspondance entre une image objet et une scène (avec SURF par exemple).

Informations utiles pour un usage avancé de la librairie javacvPro.

  • Les buffers sont en fait des objets IplImage (conteneur image natif de la librairie OpenCV) implémentés par la librairie javacv (sur laquelle est basée la librairie javacvPro).
  • La plupart des fonctions de la classe OpenCV de la librairie javacvPro sont appliquées par défaut sur le buffer principal.
  • Mais on pourra également utiliser directement les autres buffers en les appelant par leur nom pour toutes les fonctions de la classe OpenCV de la librairie javacvPro qui acceptent en paramètre un objet IplImage. Il suffira dans ce cas de spécifier le buffer voulu par son nom. Par exemple :
opencv.fonction(opencv.Memory2);

où opencv est un objet OpenCV.

Dénomination des buffers de la classe OpenCV :

  • Les noms des buffers disponibles sont :
    • Buffer : buffer principal (3 canaux RGB)
    • BufferGray : buffer Gray (monocanal)
    • BufferR : buffer canal rouge (monocanal)
    • BufferG : buffer canal vert (monocanal)
    • BufferB : buffer canal bleu (monocanal)
    • Memory : buffer mémoire image (3 canaux RGB)
    • Memory2 : buffer mémoire image n°2 (3 canaux RGB)
  • La désignation d'un buffer à l'aide de son nom se fera sous la forme opencv.nom

Identifiants des buffers de la classe OpenCV :

  • Les buffers de la classe OpenCV peuvent également être appelés par les identifiants prédéfinis suivants avec les fonctions recevant un String en paramètre :
    • BUFFER : buffer principal (3 canaux RGB)
    • GRAY : buffer Gray (monocanal)
    • RED : buffer canal rouge (monocanal)
    • GREEN : buffer canal vert (monocanal)
    • BLUE : buffer canal bleu (monocanal)
    • MEMORY : buffer mémoire image (3 canaux RGB)
    • MEMORY2 : buffer mémoire image n°2 (3 canaux RGB)

Synthèse des fonctions utiles pour la manipulation des buffers JavacvPro

Cliquer sur l'image pour agrandir.

Commentaires utilisateurs

Aucun

Cette page est une création originale de Xavier HINAULT - Tous droits réservés - 2011