View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : copyTo()


Description

  • Cette fonction permet des transferts facilités d'un buffer vers un autre, d'un IplImage ou d'un PImage vers un buffer, à la condition que les images aient le même nombre de canaux (1 si monocanal ou 3 si RGB) et le même codage (8 bits non signés)
  • Voir également : copy(), remember(), getBuffer(), getMemory()

Déclaration source java

public void copyTo(opencv_core.IplImage iplImgSrc, opencv_core.IplImage iplImgDest)
public void copyTo(PImage imgSrc, opencv_core.IplImage iplImgDest)

Syntaxe

opencv.copyTo(img, iplImg); // copie le PImage vers le IplImage ou le buffer
opencv.copyTo(iolImgSrc, iplImgDest); // copie le IplImage ou buffer source vers le IplImage ou le buffer destination

Paramètres

  • opencv : un objet OpenCV déclaré avec le constructeur OpenCV.
  • img : objet PImage (conteneur image Processing) source
  • iplImg: Objet IplImage (conteneur image natif OpenCV) destination
  • iplImgSrc : Objet IplImage (conteneur image natif OpenCV) source
  • iplImgDest : Objet IplImage (conteneur image natif OpenCV) destination

NB : Chaque buffer est un objet IplImage. Voir Les buffers image? pour plus de détails.

Valeur renvoyée

Aucune. L'objet IplImage destination contient l'image ou le buffer source.

Exemple

opencv.copyTo(opencv.Buffer, opencv.Memory2); // copie le Buffer principal dans le buffer Memory2
opencv.copyTo(img,opencv.Buffer); // charge le PImage dans le buffer OpenCV

L'exemple complet suivant est à copier dans Processing et est exécutable immé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 copyTo()

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.copyTo(img,opencv.Buffer); // charge le PImage dans le buffer OpenCV

        //--- initialise fenêtre Processing
        size (opencv.width()*2, opencv.height()); // crée une fenêtre Processing de la 2xtaille du buffer principal OpenCV
        //size (img.width, img.height); // alternative 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.copyTo(opencv.Buffer, opencv.Memory2); // copie le Buffer principal dans le buffer Memory2

        //--- affiche image finale ---
        image(opencv.getMemory2(),opencv.width(),0); // affiche le buffer Memory2 OpenCV dans la fenêtre Processing


}


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

}

 

Durée d'exécution de la fonction

  • La réalisation de 100 exécutions successives de la fonction dans Processing (sur un Intel Dual Core à 2.33Gz sous Ubuntu 10.04 LTS avec la version OpenCV 2.3.1) pour une image de 320x240 donne une durée moyenne pour chaque exécution de :
    • de 2 ms en mode "interprété" !

La version javacvPro 0.4 apporte une amélioration significative du transfert du PImage vers le buffer OpenCV, divisant d'un facteur 10 à 20 les délais précédemment obtenus :

  • ainsi sur un Intel Dual Core à 2.33Gz (sous Ubuntu 10.04 LTS avec la version OpenCV 2.3.1) pour une image de 320x240 donne une durée moyenne pour chaque exécution de 2 à 3ms en mode interprété !
  • sur une carte Intel N2800 1.86 Gz (sous Ubuntu 11.10 avec la version OpenCV 2.3.1) pour une image de 320x240 donne une durée moyenne pour chaque exécution de 5 ms en mode interprété !

Ces nouvelles valeurs permettent d'obtenir des fréquences maximales potentielles de traitement de 60 fps à 200 fps selon la machine. Dans tous les cas, une fréquence de traitement d'image de 30 fps est réellement atteinte même sur des machines modestes !

Commentaires utilisateurs

  • Très pratique et d'une grande souplesse d'utilisation, permettant de charger simplement un PImage dans n'importe quel buffer ou d'un buffer vers un autre.

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