Opencv - Détection de contours

sara__ Messages postés 1 Date d'inscription samedi 8 mars 2014 Statut Membre Dernière intervention 14 mars 2014 - Modifié par BunoCS le 9/03/2014 à 21:27
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 9 mars 2014 à 21:01
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

ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
9 mars 2014 à 19:30
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


--
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 mars 2014 à 21:01
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?
0
Rejoignez-nous