View  Edit  Attributes  History  Attach  Print  Search


ACCUEIL | DOCUMENTATION | STRATEGIES | TESTS


Librairie JavacvPro

Classe OpenCV : drawRectDetect()


Description

  • Cette fonction permet de tracer automatiquement les rectangles contenant les objets détectés avec la fonction detect(). Cette fonction utilise le tableau d'objet Rectangle mémorisé en interne par la classe OpenCV lors du dernier appel de la fonction detect().
  • Les rectangles sont tracés dans la fenêtre Processing courante en utilisant comme référence le coin supérieur gauche (0,0) par défaut ou tout autre point de référence si besoin. Un coefficient d'échelle peut également être appliqué.
  • Cette fonction existe dans une forme simple qui ne reçoit aucun paramètres et utilise des paramètres par défaut (pourtour rouge sans remplissage).
  • Cette fonction est également proposée dans une forme permettant de nombreux paramétrages pour une plus grande souplesse d'utilisation.
  • Voir également : detect(), cascade()

Déclaration source java

public void drawRectDetect()
public void drawRectDetect(boolean debugIn)
public void drawRectDetect(int xRefIn, int yRefIn, float scaleIn, int colorStrokeIn, int strokeWeightIn, boolean fillIn, int colorFillIn, boolean debugIn)

Syntaxe

drawRectDetect(); // dessine le rectangle dans la fenêtre Processing avec origine du tracé (0,0) et paramètres par défaut
drawRectDetect(debug); // idem avec debug actif
drawRectDetect (xRef, yRef, scale, colorStroke, strokeWeight , fill, colorFill, debug); // avec paramètres détaillés

Paramètres

  • opencv : un objet OpenCV déclaré avec le constructeur OpenCV.
  • debug : drapeau d'activation des messages de debug. true : messages actifs. false : messages inactifs
  • xRef, yRef : coordonnées du point de référence à utiliser pour le tracé dans la fenêtre Processing. Le coin supérieur gauche a pour coordonnées (0,0).
  • scale : facteur d'échelle à appliquer pour le tracé. Mettre 1 par défaut.
  • colorStroke : couleur du pourtour. Peut recevoir color(R,G,B).
  • strokeWeight : largeur du pourtour.
  • fill : drapeau d'activation du remplissage. true : remplissage actif, false : remplissage inactif (équivalent noFill()).
  • colorFill : couleur du remplissage. Peut recevoir color(R,G,B).
  • Pour que le tracé se fasse sur l'image d'origine, il faut afficher cette image avant d'appeler la fonction drawRectDetect() de façon à ce que le tracé se fasse par dessus.

Valeur renvoyée

Aucune.

Utilisation type

  • Pour tracer le pourtour des rectangles encadrant les objets détectés.

Exemple


opencv.drawRectDetect(true); // affiche les rectangles détectés avec messages debug

//drawRectDetect (xRef, yRef, scale, colorStroke, strokeWeight , fill, colorFill, debug);
opencv.drawRectDetect (0, 0, 1, color(255,255,0), 3 , true, color(0,0,255), true); // tracé avec les paramètres
 

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 cascade), detect() et drawRectDetect()

import monclubelec.javacvPro.*; // importe la librairie javacvPro
import java.awt.*; // pour classes Point , Rectangle..

PImage img;

Rectangle[] faceRect;

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); // 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

        //-- charge le fichier de description ---        
        opencv.cascade("FRONTALFACE_ALT", true); // initialise détection de visage
        //opencv.cascade("/usr/share/opencv/haarcascades/","haarcascade_frontalface_alt.xml"); // utilise chemin absolu Rép + nom fichier

        //--- initialise fenêtre Processing
        size (opencv.width(), opencv.height()); // crée une fenêtre Processing de la taille 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

        faceRect = opencv.detect(true); // détection des visages avec messages debug

        //opencv.drawRectDetect(true); // affiche les rectangles détectés avec messages debug

        //drawRectDetect (xRef, yRef, scale, colorStroke, strokeWeight , fill, colorFill, debug);
        opencv.drawRectDetect (0, 0, 1, color(255,255,0), 3 , true, color(0,0,255), true); // tracé avec les paramètres


        println("Nombre de visages de face détectés =" + faceRect.length + ".");

       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 Cascade - drawRect - détection de visages

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
import java.awt.*; // pour classes Point , Rectangle..

PImage img;
Rectangle[] faceRect;

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

        //-- charge le fichier de description ---        
        //opencv.cascade("FRONTALFACE_ALT", true); // initialise détection de visage
        opencv.cascade("/usr/local/share/OpenCV/haarcascades/","haarcascade_frontalface_alt.xml"); // utilise chemin absolu Rép + nom fichier
        // supporte chemin absolu avec ou sans / en fin de chaine

}


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); // charge 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(img,0,0); // affiche le buffer principal OpenCV dans la fenêtre Processing

        //--- opérations sur image ---

        millis0=millis(); // mémorise millis()  

        //faceRect = opencv.detect(true); // détection des visages avec messages debug
        faceRect = opencv.detect(3,true); // détection des visages avec coeff vitesse élevée et messages debug

        //opencv.drawRectDetect(true); // affiche les rectangles détectés avec messages debug

        //drawRectDetect (xRef, yRef, scale, colorStroke, strokeWeight , fill, colorFill, debug);
        opencv.drawRectDetect (0, 0, 1, color(255,255,0), 3 , true, color(0,0,255), true); // tracé avec les paramètres


        println("Nombre de visages de face détectés =" + faceRect.length + ".");


        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

  • Simple et efficace !

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