Opencv - Détection de contours

Signaler
Messages postés
1
Date d'inscription
samedi 8 mars 2014
Statut
Membre
Dernière intervention
14 mars 2014
-
Messages postés
15009
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
-
Bonjour,

J'ai fais un programme en opencv qui sert de'afficher une image de la convertie en niveau de gris , de calculer les pixels , maint j'ai ajouter un fonction qui fait le contour mais ça marche pas voici le code ,
Quelqu'un peut m'aider

#include <opencv/cv.h>
#include <opencv/highgui.h>

IplImage *imgRgb;
IplImage *imgGrs;
IplImage *imgBin;
IplImage* cannyImg;


int seuil;
int inverser;
void initialiserSysteme()
{
    imgRgb = cvCreateImage(cvSize(256, 256), 8, 3);
    imgGrs = cvCreateImage(cvSize(256, 256), 8, 1);
    imgBin = cvCreateImage(cvSize(256, 256), 8, 1);
    IplImage* canny = cvCreateImage(cvGetSize(imgGrs),IPL_DEPTH_8U,1) ;
}

void chargerImage(char *nom)
{
    IplImage *tmp = cvLoadImage(nom, CV_LOAD_IMAGE_COLOR);
    cvResize(tmp, imgRgb, CV_INTER_LINEAR);
    cvReleaseImage(&tmp);
}

void afficherImage()
{
    cvShowImage("imgRgb", imgRgb);
    cvShowImage("imgGrs", imgGrs);
    cvShowImage("imgBin", imgBin);
    cvShowImage( "canny", cannyImg );

    cvWaitKey(0);
}

void contour()
{
    cannyImg = cvCreateImage(cvGetSize(imgGrs), IPL_DEPTH_8U, 1);

    cvCanny(imgGrs, imgGrs, 100, 100, 3);
    //cvCvtColor( imgGrs, imgGrs, CV_BGR2GRAY );
}
  
void convertirImage()
{
    cvCvtColor(imgRgb, imgGrs, CV_BGR2GRAY);
}

void lirePixel(int event, int x, int y, int flags, void* param)
{
    switch(event)
    {
    case CV_EVENT_LBUTTONDOWN:
        int pixVal = (int)cvGetReal2D(imgGrs, y, x);
        printf("imgGrs: x = %d, y = %d, pix = %d\n", x, y, pixVal);
        break;
    }
}

void identifierPixel()
{
    cvNamedWindow("imgRgb", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("imgGrs", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("canny",1);

    cvSetMouseCallback("imgRgb", lirePixel, 0);  
    cvSetMouseCallback("imgGrs", lirePixel, 0);
}

void binariserImage(int smin, int smax)
{
    cvThreshold(imgGrs, imgBin, smin, 255, CV_THRESH_TOZERO);
    cvThreshold(imgBin, imgBin, smax, 255, CV_THRESH_TOZERO_INV);
    cvThreshold(imgBin, imgBin, 10, 255, CV_THRESH_BINARY);
    //cvNot(imgBin, imgBin);
}
  

int main(int argc, char** argv )
{
    initialiserSysteme();
    chargerImage("image/oiseaux.jpg");
    void contour();
    convertirImage();
    identifierPixel();
    binariserImage(130, 250); 


    afficherImage();

    return 0;
}

2 réponses

Messages postés
572
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
14 février 2021
2
sur ce site il existe une source manipulant une image pour la transformée en région.
Téléchargez la et modifier la pour obtenir le résultat voulu


--
Messages postés
15009
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 avril 2021
94
Hello,

Voici quelques remarques.
J'ai édité ton message pour ajouter de l'indentation et surtout les balises code. Plus d'infos ici

mais ça marche pas
C'est un peu court... comme dirait Cyrano

Dans ta méthode
initialiserSysteme()
, tu crée une variable local
canny
qui ne sert à rien car elle serait détruire à la sortie.

Ta méthode
contour()
ne semble pas faire grand chose: tu crée une image mais tu ne l'utilises pas...

Méthode
lirePixel()
: un switch avec une seul condition?