IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Passage par zéro du filtre laplacien


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Etudiant
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut Passage par zéro du filtre laplacien
    Bonjour Tout le monde,

    Je suis entrain de réalisé un petit programme ou je charge une image et ensuite j'applique le filtre cvLaplacien() sur cette image. Par la suite je parcours l'image pixel par pixel et j'aimerais détecter le passage par zéro du Laplacien en comparent chaque pixel avec le signe du pixel suivant (horizontalement et verticalement) et c'est exactement là ou je suis bloquer!! Si le pixel subit un changement de signe par rapport au pixel suivant je vais l'enregistrer dans une nouvelle image sauf que je suis bloquer dans l'étape d'avant.

    Voici le code que j'ai mis en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    int main( int argc, char** argv ) {
     
    IplImage* img = 0;  
    IplImage* img2 = 0; 
     
     
    // Charger image originale
    img = cvLoadImage( "../Moon.jpg", 0);
     
    // create image
    img2 = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_32F ,1);
     
    // Appliquer filtre laplacien 
    cvLaplace(img, img2);
     
    //Enregistrer l'image
    cvSaveImage("../test.jpg",img2);
    cout << "Image width  : " << img2->width << "\n"; 
    cout << "Image height : " << img2->height << "\n"; 
    cout << "-----------------------------------------\n";
     
     // Parcourir l'image pixel par pixel
     CvScalar pixel;
     for(int row = 1; row < ((cvGetSize(img2).height)-1); ++row) {
    	 for (int col = 1; col < ((cvGetSize(img2).width)-1); ++col) {
     
    		pixel = cvGet2D(img2,row,col);
    		if((pixel*cvGet2D(img2,row-1,col))<0) // Je peux pas utiliser l'opérateur * ici et je sais pas pk ??
    		{
     
    		}
    }
     
     // creation de la fenetre
    cvNamedWindow("Aprés traitement", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("Aprés traitement", 650, 100);
     
     // show the image
     cvShowImage("Avant traitement", img );
     cvShowImage("Aprés traitement", img2 );
     
    // wait for a key
    cvWaitKey(0);
     
    cvDestroyWindow("Avant traitement");
    cvDestroyWindow("Aprés traitement");
    cvReleaseImage(&img);
    cvReleaseImage(&img2);
     
    return 0; 
     
     }
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tu ne peux pas effectuer cette multiplication car CvScalar est une structure C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct CvScalar
    {
        double val[4];
    } CvScalar;
    Ton image n'ayant qu'un seul canal, il te suffit de te servir de pixel.val[0].

    Remarque : si tu ne te sers que de row et row-1 (resp. col col-1) tu n'as pas besoin de retrancher 1 à height (resp. width).

  3. #3
    Membre averti
    Profil pro
    Etudiant
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Merci pour votre réponse ça m'as aider par contre j'ai vu que la fonction cvLaplace() retourne la valeur absolue de Laplacien, on fait comment pour avoir le Laplacien avec les valeurs positives/négatives et non pas les valeurs absolue ou les valeurs positives ??

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cool_Boy Voir le message
    on fait comment pour avoir le Laplacien avec les valeurs positives/négatives et non pas les valeurs absolue ou les valeurs positives ??
    En convertissant ton image dans un type de stockage signé (CV_32F par exemple) tu devrais y arriver

  5. #5
    Membre averti
    Profil pro
    Etudiant
    Inscrit en
    Janvier 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 31
    Par défaut
    Merci bcp pour ces réponses utiles
    Mon image est à la base enregistré avec la valeur IPL_DEPTH_32F :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     img2 = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_32F ,1);
    et juste après j'applique le filtre Laplacien et ça change rien pour le résultat.

  6. #6
    Invité
    Invité(e)
    Par défaut
    img2 est ton image finale oui, déjà fait dans ton premier code, mais je te parlais de convertir ton image originale img aussi avant de calculer le laplacien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage par zéro sur Simulink
    Par onees dans le forum Simulink
    Réponses: 3
    Dernier message: 27/05/2013, 08h15
  2. passage par zéro du laplacien
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/06/2005, 09h58
  3. passage par session_OnEnd
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 06/05/2004, 11h28
  4. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14
  5. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo