View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : smooth()


Exemple fonction smooth() avec un noyau de taille 11x11

Description

  • Applique un effet flou au buffer principal ou à l'objet IplImage reçu en paramètre. La fonction applique un filtre Gaussien.
  • Cette fonction utilise un noyau de convolution normalisé dont il est possible de fixer la taille. Le point d'ancrage utilisé est le centre du noyau.
  • Cette fonction est basée sur la fonction native OpenCV cvSmooth() : http://opencv.itseez.com/modules/imgproc/doc/filtering.html#smooth
  • La documentation OpenCV 2.3. annonce la fonction cvSmooth() comme étant obsolète, conseillant de lui préférer la fonction cvBlur().
  • Voir également : blur()

Déclaration source java

public void smooth()
public void smooth(int ksizeIn)
public opencv_core.IplImage smooth (opencv_core.IplImage iplImgIn)
public opencv_core.IplImage smooth (opencv_core.IplImage iplImgIn, int ksizeIn)

Syntaxe

opencv.smooth(ksize); // applique un effet flou avec un noyau de convolution ksize x ksize sur le buffer principal

Paramètres

  • opencv : un objet OpenCV déclaré avec le constructeur OpenCV.
  • ksize (int) : taille en pixels du noyau de convolution utilisé : le noyau a la taille ksize x ksize pixels. Utilise 3 par défaut. Valeurs possibles 3, 5, 7, 11.. (une valeur impaire. Plus ksize est grand, plus le flou est important.

Valeur renvoyée

Aucune. Le buffer principal ou l'objet IplIMage passé en paramètre est modifié.

Utilisation type

  • Il est fréquent d'utiliser un effet flou de noyau 3x3 sur une image avant l'application d'une détection de contour afin de s'affranchir du bruit.

Exemple


opencv.smooth(3); // applique un effet flou avec un noyau de convolution 3 x 3 sur le buffer principal

opencv.smooth(opencv.Memory); // applique un effet flou avec un noyau de convolution 5 x 5 sur le buffer Memory
 

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 blur()

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()); // 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.smooth(11); // applique un flou à l'image

        //--- affiche image finale ---
        image(opencv.getBuffer(),opencv.width(),0); // affiche le buffer principal 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 smooth

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=30; // 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); // 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.setBrightnessContrast(+40,+75); // applique réglage luminosité et contraste sur le buffer principal OpenCV

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

        //--- affiche image finale ---

        image(opencv.getBuffer(),widthCapture,0); // affiche le buffer principal OpenCV dans la fenêtre Processing        

  } // fin if available

} // fin draw

 

Commentaires utilisateurs

Aucun

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