View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS

OpencvselectBlobs

Main.OpencvselectBlobs History

Hide minor edits - Show changes to output

Changed line 97 from:
      
to:
Changed line 101 from:
      
to:
Changed line 103 from:
      
to:
Changed line 107 from:
      
to:
Changed line 124 from:
      
to:
Changed lines 145-146 from:
 
to:

Changed lines 150-153 from:
blobsArray=opencv.selectBlobs(blobsArray, true, 3, 10, true, 0.2, true, true); // sélectionne que les rectangles ratio W/H=3+/-10% ayant au moins 20% surface occupée
blobsArray
=opencv.selectBlobs(blobsArray, true, 1, 20, true, 0.6, true, true); // sélectionne que proche carré (ratio W/H = 1 +/- 20%) avec 60% surface occupée = balles
 
   
        
to:
       blobsArray=opencv.selectBlobs(blobsArray, true, 6, 20, true, 0.2, true, true); // sélectionne que les rectangles ratio W/H=6+/-10% ayant au moins 20% surface occupée
 
     //blobsArray=opencv.selectBlobs(blobsArray, true, 1, 20, true, 0.6, true, true); // sélectionne que proche carré (ratio W/H = 1 +/- 20%) avec 60% surface occupée = balles

Changed lines 180-181 from:
      
       
to:

Changed lines 296-299 from:
       //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, ratioHWTest, areaTest, areaRatioTest, mode, debug);
        blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
       
//blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles     
to:
       //--- sélection des Blob cohérents ---
 
      //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, delta, areaTest, areaRatioTest, mode, debug);

        blobsArray=opencv.selectBlobs(blobsArray, true, 6, 20, true, 0.2, true, true);
// sélectionne que les rectangles ratio W/H=6+/-10% ayant au moins 20% surface occupée
 
      //blobsArray=opencv.selectBlobs(blobsArray, true, 1, 20, true, 0.6, true, true); // sélectionne que proche carré (ratio W/H = 1 +/- 20%) avec 60% surface occupée = balles

Deleted line 303:
       //blobsArray=opencv.selectBlobs(blobsArray, true, 0.7, 0.7, true, 0.6, true, true); // équivalent - sélectionne que proche carré avec 60% surface occupée = balles       
Changed line 25 from:
public Blob[] selectBlobs(Blob[] blobsIn, boolean hwTestIn, float ratioWHTest, float ratioHWTest, boolean areaTestIn, float areaRatioTest, boolean modeIn, boolean debugIn)
to:
public Blob[] selectBlobs(Blob[] blobsIn, boolean hwTestIn, float ratioWHTest, float delta, boolean areaTestIn, float areaRatioTest, boolean modeIn, boolean debugIn)
Changed lines 42-44 from:
* ratioHWTest : valeur de référence pour le test h/w
* Nb : le test des 2 ratio H/W et W/H est testé simultanément (OU)

to:
* delta : valeur de variation acceptable pour le ratio, en %
Changed lines 62-65 from:
blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles

to:
blobsArray=opencv.selectBlobs(blobsArray, true, 3, 10, true, 0.2, true, true); // sélectionne que les rectangles ratio W/H=3+/-10% ayant au moins 20% surface occupée
blobsArray=opencv.selectBlobs(blobsArray, true, 1, 20, true, 0.6, true, true); // sélectionne que proche carré (ratio W/H = 1 +/- 20%) avec 60% surface occupée = balles

Changed lines 148-152 from:
       //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, ratioHWTest, areaTest, areaRatioTest, mode, debug);

       blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée

     
//blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles
to:
       //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, delta, areaTest, areaRatioTest, mode, debug);

blobsArray=opencv.selectBlobs(blobsArray, true, 3, 10, true, 0.2, true, true); // sélectionne que les rectangles ratio W/H=3+/-10% ayant au moins 20% surface occupée
blobsArray=opencv.selectBlobs(blobsArray, true, 1, 20, true, 0.6, true, true); // sélectionne que proche carré (ratio W/H = 1 +/- 20%) avec 60% surface occupée = balles
Changed lines 202-203 from:
// Exemple fonction Blobs - extraction de contour de formes binarisées
to:
// Exemple fonction selectBlobs - extraction de contour de formes binarisées
Changed line 299 from:
       //blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
to:
       blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
Changed line 302 from:
       blobsArray=opencv.selectBallBlobs(blobsArray); // sélectionne uniquement les Blobs pouvant correspondre à 1 balle
to:
       //blobsArray=opencv.selectBallBlobs(blobsArray); // sélectionne uniquement les Blobs pouvant correspondre à 1 balle
Added line 340:
Added lines 198-339:
// Programme d'exemple de la librairie javacvPro
// par X. HINAULT - Mars 2012
// Tous droits réservés - Licence GPLv3

// Exemple fonction Blobs - extraction de contour de formes binarisées

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;

Blob[] blobsArray=null; // tableau pour la détection des blobs (contour de forme)

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*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/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 ----------
 
        img=cam.get(); // récupère l'image GS video dans Pimage

        millis0=millis(); // mémorise millis() 
        opencv.copy(img); // 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() 

        //--- application du filtre mixerRGBGray()
        //opencv.mixerRGBGray(); // applique mixeur RGBGray sur le buffer principal OpenCV avec paramètres par défaut (1.0, 1.5,-2.0
        opencv.mixerRGBGray(1.0,1.5, -2.0); // mixerRGBGray appliqué sur objet IplImage avec paramètres - ici détection couleur orangée
        image(opencv.getBuffer(),opencv.width(),0); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //--- application d'un seuillage binaire ---
        opencv.threshold(0.8, "BINARY"); // seuillage binaire pour éliminer le fond
        image(opencv.getBuffer(),0,opencv.height()); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //-- détection de blobs ---
        //blobs=opencv.blobs(true); // blobs javacvPro avec paramètres par défaut +/- debug   
       
        //blobsArray=blobs(minArea,maxArea,maxBlob, findHoles, maxVertices, debug);
        blobsArray = opencv.blobs(opencv.area()/4000, opencv.area()/2, 20, true, 1000, true ); // blobs javacvPro +/- debug   
        // la fonction renvoie un tableau de Blob
        // chaque Blob est caractérisé par son aire, son centre, le rectangle entourant, le tableau des points du contour
        // pour info : la fonction blobs mémorise en interne un tableau des séquences de points détectés (jusqu'à l'appel suivant de la fonction blobs() )
        // pour utilisation avec les fonctions avancées convexHull et detectDefect par exemple

        //-- dessin du rectangle autour du tracé de la forme avant sélection --
        //opencv.drawRectBlobs (blobsArray, xRef, yRef, scale, colorStroke, strokeWeight, fill, colorFill)
        opencv.drawRectBlobs(blobsArray,0,opencv.height(),1, color(255,0,255),1,false,0); // trace le rectangle avec les paramètres
       
        //--- sélection des Blob cohérents ---
        //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, ratioHWTest, areaTest, areaRatioTest, mode, debug);
        //blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
        //blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles       

        blobsArray=opencv.selectBallBlobs(blobsArray); // sélectionne uniquement les Blobs pouvant correspondre à 1 balle
        //blobsArray=opencv.selectBlobs(blobsArray, true, 0.7, 0.7, true, 0.6, true, true); // équivalent - sélectionne que proche carré avec 60% surface occupée = balles       

        //-- réaffichage image de départ --
        image(img,opencv.width(), opencv.height());

        //-- dessin du rectangle autour du tracé de la forme --
        //opencv.drawRectBlobs (blobsArray, xRef, yRef, scale, colorStroke, strokeWeight, fill, colorFill)
        // -- toutes ces formes sont possibles
        //opencv.drawRectBlobs(blobsArray); // trace le rectangle avec les paramètres par défaut
        opencv.drawRectBlobs(blobsArray,opencv.width(),opencv.height(),1); // trace rectangle en se basant sur point référence et avec les paramètres
        //opencv.drawRectBlobs(blobsArray,opencv.width(),opencv.height(),1, color(255,0,255), 2, false, 0); // trace rectangle avec les paramètres

        //-- dessin du pourtour du blob sur l'image de départ --
        //opencv.drawBlobs (blobsArray, xRef, yRef, scale, radius, colorStroke, strokeWeight, fill, colorFill, mode);
        //-- toutes ces formes sont possibles
        //opencv.drawBlobs(blobsArray); // trace les formes du tableau de Blobs avec paramètre par défaut
        opencv.drawBlobs(blobsArray,opencv.width(),opencv.height(),1 ); // trace les formes du tableau de Blobs en se basant sur point référence + paramètre par défaut
        //opencv.drawBlobs(blobsArray,opencv.width(),opencv.height(),1,5, color(0,0,255), 1, false, 0, 0); // trace pourtour en cercles bleus

        //-- dessin du centre du blob sur le tracé de la forme --
        // opencv.drawCentroidBlobs (blobsArray, xRef, yRef, scale, radius, colorStroke, strokeWeight, fill, colorFill);
        // -- toutes ces formes sont possibles
        //opencv.drawCentroidBlobs (blobsArray); // trace le centre des Blob avec les paramètres par défaut
        opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1); // trace le centre des Blob en se basant sur point référence + échelle et avec les paramètres par défaut
        //opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1,10); // trace le centre des Blob en se basant sur point référence + échelle + radius et avec les paramètres par défaut
        //opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1,5, color(0,0,255), 1, false, 0); // trace le centre des Blob en fonction paramètres
         

        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 192-197:

(:sourcend:)

!! Exemple webcam

(:source lang=processing:)
Changed line 80 from:
import monclubelec.javacvProc.*; // importe la librairie javacvPro
to:
import monclubelec.javacvPro.*; // importe la librairie javacvPro
Changed lines 8-9 from:
%center%Path:
to:
%center%Path:/mes_images/javacvpro/javacvpro_exemple_selectBlobs.png
Changed lines 63-66 from:
to:
blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée
blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles

Added lines 73-190:

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

// Exemple fonction blobs() et drawBlobs()

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

//import java.awt.Rectangle; // importe la classe Rectangle du langage Java
// l'objet rectangle fournit les champs x,y du centre et hauteur/largeur (height/width) du rectangle

PImage img;

Blob[] blobsArray=null; // tableau pour la détection des blobs (contour de forme)


String url="http://www.mon-club-elec.fr/mes_images/online/selectblobs.png"; // 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 ---

        //--- application du filtre mixerRGBGray()
        //opencv.mixerRGBGray(); // applique mixeur RGBGray sur le buffer principal OpenCV avec paramètres par défaut (1.0, 1.5,-2.0
        opencv.mixerRGBGray(1.0,1.5, -2.0); // mixerRGBGray appliqué sur objet IplImage avec paramètres - ici détection couleur orangée

        //--- application d'un seuillage binaire ---
        opencv.threshold(0.6, "BINARY"); // seuillage binaire pour éliminer le fond
        // NB : le seuil est mis ici volontairement bas pour augmenter le nombre de fausses détections
        image(opencv.getBuffer(),opencv.width(),0); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //-- détection de blobs ---
        //blobs=opencv.blobs(true); // blobs javacvPro avec paramètres par défaut +/- debug   
       
        //blobsArray=blobs(minArea,maxArea,maxBlob, findHoles, maxVertices, debug);
        blobsArray = opencv.blobs(opencv.area()/512, opencv.area()/2, 20, true, 1000, true ); // blobs javacvPro +/- debug   
        // la fonction renvoie un tableau de Blob
        // chaque Blob est caractérisé par son aire, son centre, le rectangle entourant, le tableau des points du contour
        // pour info : la fonction blobs mémorise en interne un tableau des séquences de points détectés (jusqu'à l'appel suivant de la fonction blobs() )
        // pour utilisation avec les fonctions avancées convexHull et detectDefect par exemple

        //--- affichage des Blobs avant sélection --- 

        //-- réaffichage image de départ --
        image(img,0, opencv.height());

        //-- dessin du rectangle autour du tracé de la forme --
        opencv.drawRectBlobs(blobsArray,0,opencv.height(),1); // trace rectangle en se basant sur point référence et avec les paramètres

        //-- dessin du pourtour du blob sur l'image de départ --
        opencv.drawBlobs(blobsArray,0,opencv.height(),1 ); // trace les formes du tableau de Blobs en se basant sur point référence + paramètre par défaut

        //-- dessin du centre du blob sur le tracé de la forme --
        opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1); // trace le centre des Blob en se basant sur point référence + échelle et avec les paramètres par défaut
 

        //--- sélection des Blob cohérents ---
        //blobsArray=opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, ratioHWTest, areaTest, areaRatioTest, mode, debug);

        blobsArray=opencv.selectBlobs(blobsArray, true, 3, 3, true, 0.2, true, true); // sélectionne que les rectangles ayant au moins 20% surface occupée

        //blobsArray=opencv.selectBlobs(blobsArray, true, 0.8, 0.8, true, 0.6, true, true); // sélectionne que proche carré avec 60% surface occupée = balles
       
       
        //blobsArray=opencv.selectBallBlobs(blobsArray); // sélectionne uniquement les Blobs pouvant correspondre à 1 balle

        //-- réaffichage image de départ --
        image(img,opencv.width(), opencv.height());

        //-- dessin du rectangle autour du tracé de la forme --
        //opencv.drawRectBlobs (blobsArray, xRef, yRef, scale, colorStroke, strokeWeight, fill, colorFill)
        // -- toutes ces formes sont possibles
        //opencv.drawRectBlobs(blobsArray); // trace le rectangle avec les paramètres par défaut
        opencv.drawRectBlobs(blobsArray,opencv.width(),opencv.height(),1); // trace rectangle en se basant sur point référence et avec les paramètres
        //opencv.drawRectBlobs(blobsArray,opencv.width(),opencv.height(),1, color(255,0,255), 2, false, 0); // trace rectangle avec les paramètres

        //-- dessin du pourtour du blob sur l'image de départ --
        //opencv.drawBlobs (blobsArray, xRef, yRef, scale, radius, colorStroke, strokeWeight, fill, colorFill, mode);
        //-- toutes ces formes sont possibles
        //opencv.drawBlobs(blobsArray); // trace les formes du tableau de Blobs avec paramètre par défaut
        opencv.drawBlobs(blobsArray,opencv.width(),opencv.height(),1 ); // trace les formes du tableau de Blobs en se basant sur point référence + paramètre par défaut
        //opencv.drawBlobs(blobsArray,opencv.width(),opencv.height(),1,5, color(0,0,255), 1, false, 0, 0); // trace pourtour en cercles bleus

        //-- dessin du centre du blob sur le tracé de la forme --
        // opencv.drawCentroidBlobs (blobsArray, xRef, yRef, scale, radius, colorStroke, strokeWeight, fill, colorFill);
        // -- toutes ces formes sont possibles
        //opencv.drawCentroidBlobs (blobsArray); // trace le centre des Blob avec les paramètres par défaut
        opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1); // trace le centre des Blob en se basant sur point référence + échelle et avec les paramètres par défaut
        //opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1,10); // trace le centre des Blob en se basant sur point référence + échelle + radius et avec les paramètres par défaut
        //opencv.drawCentroidBlobs (blobsArray,opencv.width(),opencv.height(),1,5, color(0,0,255), 1, false, 0); // trace le centre des Blob en fonction paramètres
       
       
      noLoop(); // stop programme       
}


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

}
Added lines 1-85:
(:notitle:)
(:include HautPageReference:)\\
[[Main.LibrairieJavacvPro|Librairie JavacvPro]]

! Classe OpenCV : selectBlobs()
----

%center%Path:

!! Description

* Cette fonction permet de réaliser une sélection de certaines formes au sein d'un tableau de Blob renvoyé par la fonction blobs(). La fonction selectBlobs() renvoie également un tableau des Blob sélectionnés.

* Cette fonction peut réaliser d'une part un test du ratio hauteur/largeur du rectangle entourant la forme, afin par exemple de sélectionner uniquement les formes tenant dans un carré (ce qui est le cas d'une balle par exemple).

* Cette fonction peut réaliser d'autre part un test du ratio (aire de la forme / aire du rectangle contenant) afin de ne sélectionner que les formes occupant suffisamment de surface au sein du rectangle entourant. Ceci sera utile par exemple pour détecter une balle qui devra occuper au moins 60% de la surface du rectangle entourant (cf (aire du cercle / aire du carré entourant) ).

* Les 2 tests peuvent être réalisés simultanément réalisant un test de cohérence de la forme détectée. Ceci pourra être mis à profit pour détecter les formes dont on s'attend à certaines caractéristiques géométriques simples, éliminant ainsi les formes non souhaitées.

* Voir également :

!! Déclaration source java

(:source lang=java :)
public Blob[] selectBlobs(Blob[] blobsIn, boolean hwTestIn, float ratioWHTest, float ratioHWTest, boolean areaTestIn, float areaRatioTest, boolean modeIn, boolean debugIn)
(:sourcend:)

!! Syntaxe

(:source lang=processing :)
opencv.selectBlobs(blobsArray, hwTest, ratioWHTest, ratioHWTest, areaTest, areaRatioTest, mode, debug)
(:sourcend:)


!! Paramètres

* opencv : un objet OpenCV déclaré avec le constructeur [[OpencvOpencv|OpenCV]].
* blobsArray : le tableau de Blob à tester, typiquement issu de la fonction blobs()

* hwTestIn : le drapeau d'activation du test h/w - Actif si true, inactif si false
* ratioWHTest : valeur de référence pour le ratio w/h
* ratioHWTest : valeur de référence pour le test h/w
* Nb : le test des 2 ratio H/W et W/H est testé simultanément (OU)

* areaTest : le drapeau d'activation du test aire Blob / aire Rect
* areaRatio : valeur de référence pour le ratio aire Blob / aire Rect

* mode : drapeau fixant le test à réaliser - "si les conditions sont vraies" si true - "si les conditions sont fausses" si false
* debugIn : drapeau d'activation des messages de debug de la fonction

!! Valeur renvoyée

* Le tableau d'objets Blob répondant aux critères.

!! Utilisation type

* Sélectionner uniquement les formes cohérentes et éliminer les formes aléatoires détectées par erreur.

!! 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