View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS

Opencvcanny

Main.Opencvcanny History

Hide minor edits - Show changes to output

Added lines 146-242:

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

// Exemple fonction canny - détection de contour style dessin au trait

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/video0", 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() 

        //-- toutes ces formes sont possibles :
        //opencv.canny(); // applique le filtre de canny sur le buffer principal OpenCV avec paramètres par défaut
        //opencv.canny(100,200); //applique le filtre de canny sur le buffer principal OpenCV avec paramètres - noyau 3x3 par défaut
        opencv.canny(1000,2000,5); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres

        //opencv.canny(opencv.Buffer,100,400); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres - noyau 3x3 par défaut
        //opencv.canny(opencv.Buffer,100,200,3); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres
       
        //opencv.invert(); // pour dessin au trait noir sur blanc
 
     
        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

Added lines 140-145:

(:sourcend:)

!! Exemple webcam

(:source lang=processing:)
Added lines 143-147:
!! 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.73 ms en mode "interprété"  soit une fréquence maximale potentielle de 36 fps.
** de 2.57 ms en mode "compilé" soit une fréquence maximale potentielle de 38 fps.
Changed line 92 from:
import monclubelec.javacvProc.*; // importe la librairie javacvPro
to:
import monclubelec.javacvPro.*; // importe la librairie javacvPro
Changed lines 9-10 from:
to:
%center% Exemple fonction canny() avec seuil1=1000, seuil2=2000 et noyau=5.
Changed lines 72-78 from:
to:
opencv.canny(); // applique le filtre de canny sur le buffer principal OpenCV avec paramètres par défaut
opencv.canny(100,200); //applique le filtre de canny sur le buffer principal OpenCV avec paramètres - noyau 3x3 par défaut
opencv.canny(1000,2000,5); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres

opencv.canny(opencv.Buffer,100,400); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres - noyau 3x3 par défaut
opencv.canny(opencv.Buffer,100,200,3); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres

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

// Exemple fonction canny()

import monclubelec.javacvProc.*; // 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 ---

        //-- toutes ces formes sont possibles :
        //opencv.canny(); // applique le filtre de canny sur le buffer principal OpenCV avec paramètres par défaut
        //opencv.canny(100,200); //applique le filtre de canny sur le buffer principal OpenCV avec paramètres - noyau 3x3 par défaut
        opencv.canny(1000,2000,5); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres

        //opencv.canny(opencv.Buffer,100,400); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres - noyau 3x3 par défaut
        //opencv.canny(opencv.Buffer,100,200,3); //applique le filtre de canny sur le buffer OpenCV désigné avec paramètres
       
        //opencv.invert(); // pour dessin au trait noir sur blanc
       
        //--- 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

}
Changed lines 8-9 from:
%center%Path:
to:
%center%Path:/mes_images/javacvpro/javacvpro_exemple_canny.png
Changed line 14 from:
* Cette fonction peut recevoir une image mono-canal ou RGB (3 canaux). En cas d'image RGB, celle-ci est convertie en niveau de gris (voir gray()) avant que le filtre de Canny soit appliqué. Une copie du traitement final reste présente dans le buffer Gray.
to:
* Cette fonction peut recevoir une image mono-canal ou RGB (3 canaux). En cas d'image RGB, celle-ci est convertie automatiquement en niveau de gris (voir gray()) avant que le filtre de Canny ne soit appliqué. Une copie du traitement final reste présente dans le buffer Gray.
Changed line 56 from:
* ksize : taille du noyau de convolution utilisé par l'algorithme. Par défaut = 3.
to:
* ksize (int) : taille du noyau de convolution utilisé par l'algorithme. Par défaut = 3.
Added lines 1-93:
(:notitle:)
(:include HautPageReference:)\\
[[Main.LibrairieJavacvPro|Librairie JavacvPro]]

! Classe OpenCV : canny()
----

%center%Path:

!! Description

* Le filtre de Canny est un algorithme avancé de détection de contours dans une image. Le résultat est un dessin fin des contours, à la façon "bande-dessinée". Cette fonction implémente dans Processing cet algorithme !

* Cette fonction peut recevoir une image mono-canal ou RGB (3 canaux). En cas d'image RGB, celle-ci est convertie en niveau de gris (voir gray()) avant que le filtre de Canny soit appliqué. Une copie du traitement final reste présente dans le buffer Gray.

* Cet algorithme est paramétré par :
** une taille de noyau de convolution
** deux paramètres de seuillage, qui ne doivent être ni trop bas (pour éviter prise en compte du bruit) ni trop élévé (pour éviter non prise en compte de contours)

* Cette fonction est basée sur la fonction OpenCV native cvCanny() : http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html#canny

* Pour plus de détails sur le filtre de Canny, voir :
** http://fr.wikipedia.org/wiki/Algorithme_de_Canny
** http://en.wikipedia.org/wiki/Canny_edge_detector

* Voir également : sobel(), sobel2(), scharr()

!! Déclaration source java

(:source lang=java :)
public void canny()
public void canny(double threshold1In, double threshold2In)
public void canny(double threshold1In, double threshold2In, int ksizeIn)
public opencv_core.IplImage canny (opencv_core.IplImage iplImgIn, double threshold1In, double threshold2In)
public opencv_core.IplImage canny (opencv_core.IplImage iplImgIn, double threshold1In, double threshold2In, int ksizeIn)
(:sourcend:)

!! Syntaxe

(:source lang=processing :)
opencv.canny(); // applique filtre canny au buffer principal par défaut (100, 200 et 3)
opencv.canny(threshold1, threshold2); // applique filtre canny au buffer principal avec paramètres et ksize par défaut =3
opencv.canny(threshold1, threshold2, ksize); // applique filtre canny au buffer principal avec paramètres

opencv.canny(iplImg); // applique filtre canny au buffer principal avec paramètres par défaut (100, 200 et 3)
opencv.canny(iplImg,threshold1, threshold2); // applique filtre canny au buffer principal avec paramètres et ksize par défaut =3
opencv.canny(iplImg, threshold1, threshold2, ksize); // applique filtre canny au buffer principal avec paramètres

(:sourcend:)


!! Paramètres

* opencv : un objet OpenCV déclaré avec le constructeur [[OpencvOpencv|OpenCV]].
* threshold1 et threshold2 (double) : valeur de seuil 1 et 2 utilisées par l'algorithme. En pratique, utiliser threshold2 = 2xthreshold1. Valeurs usuelles 100 et 200. Faire des essais pour trouver le meilleur résultat adapté à votre situation.
* ksize : taille du noyau de convolution utilisé par l'algorithme. Par défaut = 3.
* iplImg : objet IplImage

!! Valeur renvoyée

Aucune. L'image source est modifiée. Une copie est mise dans le buffer Gray.

!! Utilisation type

* Cet algorithme pourra être utilisé pour détecter les contours en vue d'une détection et d'analyse de formes.

!! Exemple

(:source lang=processing :)


(:sourcend:)

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


(:source lang=processing :)


(:sourcend:)


!! Commentaires utilisateurs

>>bgcolor=#dfd border='3px dotted green'<<

Aucun

>><<

(:include BasPageReference:)

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