View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : allocateBuffer(), allocateMemory, allocateMemory2()


Description

  • Ces 3 fonctions d'usage avancé permettent l'initialisation des buffers images de la librairie javacvPro avec des tailles d'image différentes. Ces fonctions sont à appeler en début de programme dans la fonction setup().
  • La fonction allocateBuffer() initialise à la même taille les buffers suivants :
    • 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.
  • La fonction allocateMemory() initialise à la même taille les buffers suivants :
    • 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() ).
  • La fonction allocateMemory2() initialise à la taille voulue uniquement le buffer suivant :
    • le buffer Memory2, qui permet le stockage d'une image 3 canaux également (voir fonction remember2() ).
  • ATTENTION : les fonctions de traitement d'image de la librairie javacvPro s'appliquent seulement sur des images ayant la même taille que le buffer principal (initialisé avec allocate() ou allocateBuffer() ).
  • L'utilisation de buffer mémoire de taille différente du buffer principal sera utile essentiellement lors de l'utilisation des algorithmes de recherche de concordance tel que SURF.
  • Ces fonctions sont différentes de la fonction allocate() qui initialise l'ensemble des buffers image utilisés par la librairie javacvPro à la même taille en une seule instruction, ce qui convient le plus souvent mais pas toujours... Dans la très grande majorité des cas, l'utilisation de la fonction allocate() sera à privilégier cependant.
  • Au final, on pourra ainsi utiliser jusqu'à 3 tailles différentes d'images au besoin.
  • Voir également : allocate()

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.

Déclaration source java

void allocateBuffer (int widthIn, int heightIn)
void allocateMemory (int widthIn, int heightIn)
void allocateMemory2 (int widthIn, int heightIn)
 

Syntaxe


opencv.allocateBuffer( widthIn, heightIn);
opencv.allocateMemory( widthIn, heightIn);
opencv.allocateMemory2( widthIn, heightIn);
 

Paramètres

  • opencv : un objet OpenCV déclaré avec le constructeur OpenCV.
  • widthIn : largeur de l'image qui sera chargée dans le buffer
  • heightIn : hauteur de l'image qui sera chargée dans le buffer

Valeur renvoyée

Aucune. Crée les buffers internes voulus de la librairie javacvPro à la taille voulue.

Utilisation type

  • Stockage dans le buffer Memory d'une image d'objet qui sera recherchée dans une image de scène à l'aide d'un algorithme de concordance tel que SURF. Dans ce cas, l'image de l'objet sera typiquement plus petite que l'image de scène.

Exemple


opencv = new OpenCV(this); // initialise objet OpenCV à partir du parent This

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

//-------- initialisation OpenCV Memory ---------------
opencv.allocateMemory(imgObjet.width, imgObjet.height); // initialise les buffers Memory OpenCv à la taille de l'image Objet

opencv.remember(imgObjet); // charge le PImage dans le buffer Memory OpenCV
//opencv.copyToMemory(imgObjet); // charge le PImage dans le buffer OpenCV - idem

//========== image scene ==================
//-- charge image utilisée ---
imgScene=loadImage(urlScene,"png"); // crée un PImage contenant le fichier à partir adresse web

//-------- initialisation OpenCV Buffer ---------------
opencv.allocateBuffer(imgScene.width, imgScene.height); // initialise les buffers OpenCv à la taille de l'image Scene
opencv.copy(imgScene); // charge le PImage dans le buffer OpenCV
 

Commentaires utilisateurs

Aucun

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