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
14839
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 octobre 2020
-
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
557
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
30 septembre 2020
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
14839
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 octobre 2020
92
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?