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 :

Error: Assertion failed


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 10
    Points
    10
    Par défaut Error: Assertion failed
    Bonjour mes amis,

    En fait, je suis encours de travailler sur l'extraction de caractéristique d'une base de données des images suivant ce code source:
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    #include "stdafx.h"
    #include <sstream>
    #include <time.h>
    #include <fstream>
    #include <iostream>
    #include <highgui.h>
    #include <cv.h>
    #include <iomanip>
    #include <opencv2/ml/ml.hpp>
    #include <opencv2/opencv.hpp>
    #include <opencv2/core/mat.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/legacy/compat.hpp>
    #include <opencv2/nonfree/nonfree.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2\features2d\features2d.hpp>
    #include <opencv2\nonfree\features2d.hpp>
     
    using namespace std;
    using namespace cv;
     
        void save_descriptor_in_file(Mat desc)
        {
            //faire tourner ce programme la première fois avec « data_nosmile.txt » et la seconde avec « data_smile.txt »
            ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_nosmile.txt",ios::app);                
            //ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_smile.txt",ios::app);        
            if (myfile.is_open())
            {  
                //for(int i=0 ; i<desc.rows ; i++)
                for(int i=0 ; i<10 ; i++) // on limite le nombre de descripteurs par image à 10
                {              
                    for(int j=0; j<desc.cols ; j++)//desc.cols est ici toujours égale à 128
                    {        
                        myfile<<desc.at<float>(i,j)<<"\n";
     
                    }
                }
            }
            else
            {
                cout<<"error : Unable to open file";
            }
        }
     
    void display_image_descriptors(Mat image){
    namedWindow("Descriptors", 1);
    imshow("Descriptors", image);
    }
     
    void calculate_descriptor(Mat img_cropped){
    SurfFeatureDetector detector(1500);
    vector<KeyPoint> keypoints;
    Mat descriptors;
    SurfDescriptorExtractor extractor;
    detector.detect(img_cropped, keypoints);
    extractor.compute(img_cropped, keypoints, descriptors);
    drawKeypoints(img_cropped, keypoints, img_cropped, Scalar(255,255,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
    //display_image_descriptors(img_cropped); ////optionnel////
    Mat desc = Mat(descriptors).reshape(0, keypoints.size());
    save_descriptor_in_file(desc);
    }
     
    void display_image(IplImage* image){
    cvNamedWindow("Image", 1 );
    cvShowImage( "Image", image);
    }
     
    void load_image(int i){
    ostringstream ostr;
    //faire tourner ce programme la première fois avec "-11.jpg" et la seconde avec "-12.jpg"
    ostr <<  "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<<"-11.jpg";
    //ostr << "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<< "-12.jpg";
    string s = ostr.str();
    char* chemin = &s[0];
    Mat img_original=cvLoadImage(chemin);
    Mat img_cropped = img_original(Rect(240, 140, 180, 220));
    Ptr<IplImage> img = &img_cropped.operator IplImage();
        if(img !=NULL){
         //   display_image(img);////optionnel////
            calculate_descriptor(img_cropped);
            }
        else{
            cout<<"error: can’t open image "<<i;
            }
     }
     
    int main(){
     
    //décommentez pour voir les images une à une après appui sur la touche ‘espace’
    //  int key=0;
    //  int i=1;
    //  do{
    for(int i=1; i<=180; i++){
        load_image(i);
    // cout<<i<<"\n";
    //  key = cvWaitKey();
    }
    //  i++;
    //  }while(key==32);//si appui sur la touche ‘espace’
        return 0;
    }
    mais lorsque je débogue ce code avec une version d'OpenCV 2.4.6 il me donne cette erreur
    OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[
    1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file c
    :\opencv 2.6.0\build\include\opencv2\core\mat.hpp, line 537
    Qui peut m'aider svp à corriger cette erreur.
    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Computer Vision engineer
    Inscrit en
    Mars 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Computer Vision engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 65
    Points : 86
    Points
    86
    Par défaut
    Le bug indique une erreur d'insertion, t'essaies d'insérer une valeur dans une matrice qui n'est pas adéquate (ça peut venir des dimensions, de la profondeur ou ou du type de la matrice).
    Essaie de découper ton code (Je te conseille de ne pas trop mélanger les version c/c++ d'openCV, par éxample les cv::Mat vient de l'implémentation c++ et cvLoadImage de la version C, utilises plutôt cv::imread, cv::imshow, cv::namedWindow...) tu verras à quel moment ce bug survient plus exactement .

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 10
    Points
    10
    Par défaut
    Merci Grimmjoww pour la réponse,
    j'ai modifié IplImage vers cv::Mat mais les mêmes erreurs. Par contre je pense que l'erreur vient de la boucle suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0 ; i<10 ; i++)
    lorsque je mets cette boucle il me donne l'erreur citez auparavant mais lorsque je limite cette boucle par 128 ça revient à cette erreur
    OpenCV Error: Assertion failed (udata < (uchar*)ptr && ((uchar*)ptr - udata) <= (ptrdiff_t)(sizeof(void*)+16)) in unknown function, file ..\..\..\modules\core\src\alloc.cpp, line 78

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    j'ai résolu l'erreur. En fait, il faut tout d'abord laisser la première boucle limité par desc.rows et par la suite supprimer la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ptr<IplImage> img = &img_cropped.operator IplImage();
    et faire ce modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    display_image(img_cropped);

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

Discussions similaires

  1. Debug Assertion Failed ! File: dbgheap.c
    Par jacques_henry dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2015, 11h29
  2. OpenCV Error: Assertion failed
    Par akles dans le forum OpenCV
    Réponses: 2
    Dernier message: 23/08/2011, 10h25
  3. Réponses: 1
    Dernier message: 12/04/2011, 10h07
  4. Réponses: 4
    Dernier message: 22/11/2005, 17h55
  5. Réponses: 3
    Dernier message: 07/12/2004, 22h09

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