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 :

Programme OpenCV qui cesse de fonctionner : erreur de segmentation


Sujet :

OpenCV

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Programme OpenCV qui cesse de fonctionner : erreur de segmentation
    Bonjour les internautes,
    je développe depuis quelques jours en C++ des applications simples de traitements d'images. Suite à l'écriture d'un programme tout basique, Code::Blocks plante à chaque exécution : après ouverture de la console, j'ai une fenêtre windows qui s'ouvre, avec écrit "nonDuProjet.exe a cessé de fonctionner"... 02 histogramme.rar02 histogramme.rarCela vient nécessairement de mon code, il y a un cheveu dans la soupe, mais où ? si quelqu'un peut m'aider...

    D'autre part, j'ai tenter de scinder mon projet en trois fichiers : main.cpp , fonction.h & fonction.c
    Dans fonction.c j'ai décrit une fonction qui prend en paramètre un pointeur sur structure IplImage (void etirerHistogramme(IplImage *img). Dans mon main, quel est la syntaxe a utiliser pour appeller cette fonction ? c'est surtout le paramètre qui me pose soucis.

    Je vous joins mon projet. Merci d'avance.
    02 histogramme.rar
    Stepper_87

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Salut,

    Je viens de DL ton code et je vais regarder rapidement.

    Deux choses pour le moment.
    Tu sembles utiliser des ipl image. Depuis opencv2, il faut utiliser des Mat. Toutes les nouvelles fonctions sont faites pour des Mat et non pas des Iplimage.
    Quand tu donnes ton code, un copier coller sur la page du forum c'est plus simple, et ne donne que les fichiers necessaire si tu veux vraiment donner un .rar.
    Les fichiers .exe et temps sont inutiles.

    [edit]
    Bon pour compiler j'ai du renommer tes fichiers en .cpp et .hpp, il semble exister un conflit entre la version c et c++.
    Sinon, premiere execution sans probleme. Il m'affiche bien une image couleur et une image en niveaux de gris.
    En suppirmant les commentaires sur la fonction qui te pose probleme, cela fonctionne aussi.

    Rapide regard sur ta fonction etirerHisto.
    Tu poses pmin = 0 et pmax = 255. Reflechis deux minutes et tu comprendras que tu dois poser pmin = 255 et pmax = 0.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci de prendre un peu de temps pour m'aider

    J'utilise la version 1.0 d'OpenCV, il me semble que ce sont encore les IplImage avec cette version ?
    A propos de ta seconde remarque, je le saurais pour une prochaine fois je ne suis pas plus un habitué des forums que du traitement d'images !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Regarde les edits du post precedent.

    Sinon, passe a la version 2.4.9, c'est la derniere. Si tu as un probleme lie a la version 1.x je ne pourrais pas t'aider, et je pense que personne sur le forum n'utilise encore cette vielle version.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour tes conseils. Je n'ai pas d'erreur de compilation non plus mais le programme plante systématiquement à son exécution... toujours le même message "histogramme.exe a cessé de fonctionner"

    En quoi est ce que la présence de commentaire peut elle jouer sur le fonctionnement du programme ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Je me suis peut-etre mal exprime.

    J'ai une premiere fois execute ton programme tel que donne dans le fichier .rar.
    Ensuite j'ai enleve les // devant la fonction pour etendre l’histogramme.
    Dans les deux cas, cela fonctionne parfaitement chez moi.

    Retente avec une photo carre, tu as peut etre un probleme d'inversion entre les x et les y.

    Sinon passe a la derniere version, sinon je vais avoir du mal a t'aider.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    depuis nos derniers échanges, j'ai procédé à quelques changement : j'ai migré d'IDE vers Visual Studio Professionnal 2010, et je suis également passé à la version 2.4.9 d'OpenCV.

    Cependant je rencontre de nouveaux problèmes : j'ai voulu transcrire mon code pour qu'il soit "compréhensible" par la version 2.4.9 d'OpenCV.

    Dans mon fichier "fonction.cpp", je ne trouve pas la syntaxe correct pour accéder à la valeur des pixels de mon image :
    je declare un CvScalar intensity et ensuite écrit

    intensity = img.at<uchar>(j, i); l'IDE détecte une erreur de syntaxe
    J'ai également essayé : intensity = cvGet2D(img, j, i); sans succès de ce côté aussi.

    De même, je ne trouve pas la nouvelle syntaxe pour accéder au nombre de canal de mon image lors du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ("image"->nChannels != 1)    return ;
    Si vous avez la solution à mes problèmes, vous seriez d'une grande aide ! Merci d'avance.
    code.rar

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comme indiqué en paramètre template : intensity = img.at<uchar>(j, i); tu demandes un retour de type uchar (ou unsigned char) et non CvScalar.

    cvGet2D est à oublier en C++.

    Attention : "image" entouré de guillemets est une chaine de caractères et non ton cv::Mat image en paramètre de la fonction, et image n'est pas un pointeur.
    À noter aussi que le nombre de canaux est représenté par la méthode channels(). nChannels n'existe pas pour la classe cv::Mat.
    if (image.channels() != 1).

    Remarque : afin d'éviter une copie inutile, préfère passer ton image par référence constante (à voir aussi).

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    tout d'abord, merci pour ta précédente réponse. Je rencontre à nouveau un petit soucis : avec openCv 1.0, on pouvait faire la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // création d'une ROI
    CvRect roi = cvRect(0, 0, sizeROI, sizeROI);
     
    // initialisation de la ROI
    cvSetImageROI(image, roi) ;
     
    // on relâche la ROI
    cvResetImageROI(source) ;
    Je cherche les syntaxes équivalentes pour openCv 2.4.9. Malheureusement, je ne trouve rien que me convienne dans la documentation en ligne... Je ne cherche peux-être pas au bon endroit.
    Si quelqu'un a une piste pour moi, il est le bienvenue ! Merci d'avance.

    Stepper

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Salut,

    Alors avec opencv 2.x.x cela ne fonctionne pas exactement de la même manière.
    Tu vas définir une nouvelle Mat qui est en fait une sous image de ton image principale.

    Et c'est tres bien decrit dans la doc sur les constructeur des Mat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // create a new 320x240 image
    Mat img(Size(320,240),CV_8UC3);
    // select a ROI
    Mat roi(img, Rect(10,10,100,100));
    // fill the ROI with (0,255,0) (which is green in RGB space);
    // the original 320x240 image will be modified
    roi = Scalar(0,255,0);

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/02/2010, 12h49
  2. Réponses: 0
    Dernier message: 30/04/2009, 10h17
  3. Problème d'acquisition d'une image vidéo avec OpenCV
    Par erwangouyette dans le forum C++
    Réponses: 0
    Dernier message: 22/08/2008, 19h28
  4. Problème d'insertion avec OpenCV
    Par Ph.denis dans le forum Eclipse C & C++
    Réponses: 1
    Dernier message: 15/10/2007, 11h31
  5. problème QTDesigner avec OpenCV
    Par kanzarih dans le forum Qt
    Réponses: 13
    Dernier message: 04/07/2007, 13h05

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