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 :

Erreur de violation d'accès


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Juin 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lille
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Erreur de violation d'accès
    Bonjour,
    J'essaye d’exécuter un code sous visual studio 2010 en c++ en utilisant la lib OpenCV.
    Le code semble bon, lorsque je génère le projet, je n'obtient aucune erreur, je lance donc la compilation et l’exécution. Mais j’obtiens immédiatement un message d'erreur :
    "Exception non gérée à 0x000000013faf16bd dans Opencvtest.exe*: 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x0000000000000000."

    Voici mon code:
    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
    //Include
    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cstdlib>
    #include <math.h>
    #include <vector>
    #include <stdio.h>
    #include <opencv2/highgui/highgui.hpp>
     
    using namespace std;
    using namespace cv;
     
    //Macro
    #ifndef M_PI
       #define M_PI 3.14159265358979323846
    #endif
     
    //Proto
    Mat dirac (Mat_<uchar>,int);
     
    int main ()
    {
    	Mat_<uchar> img = imread("C:/img.jpg",0);
    	Mat_<uchar> img2 = dirac(img,150);
     
       // Affichage de l'image img 2
       namedWindow ("img2", CV_WINDOW_AUTOSIZE);
       imshow ("img2", img2);
     
     
    	return EXIT_SUCCESS;
    }
     
     
    Mat dirac (Mat_<uchar> x, int sigma)
    {
     
    	int row = x.rows;
    	int col = x.cols;
    	Mat_<uchar> f;
    	for (int i=0; i<row; i++)
    		{
    			for (int j=0; j<col; j++)
    			{
    				if (x(i,j)<=sigma && x(i,j)>=-sigma)
    				{f(i,j)=(1/(2*sigma))*(1+cos(M_PI*x(i,j)/sigma));}
    				else
    				{f(i,j)=0;}
    			};
    		}
    	return f;
    }
    D'où pourrais venir le problème?
    Merci d’avance.

    EDIT: Je voudrais également savoir si la manière de déclarer les matrices ainsi que le remplissage des matrices dans la double boucle for est correct?
    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
     
    Mat evolution(Mat_<uchar> u0, Mat_<uchar> g, int lambda, int mu, int alf, int delt, int epsilon, int numIter)
    	{
            //Déclaration des matrices
    	int row = u0.rows;
    	int col = u0.cols;
    	Mat_<uchar> u(row,col);
    	Mat_<uchar> vx(row,col);
    	Mat_<uchar> vy(row,col);
    	Mat_<uchar> ux(row,col);
     
     
            ... Instructions ...
            for (int i = 0; i < row; i++)
    		{
    			for (int j = 0; j< col; j++)
    				{
    					normDu(i,j)=sqrtf((int)ux(i,j)*(int)ux(i,j)+(int)uy(i,j)*(int)uy(i,j)+1e-10);
    					Nx(i,j)=(int)ux(i,j)/(int)normDu(i,j);
    					Ny(i,j)=(int)uy(i,j)/(int)normDu(i,j);
     
    				}
    		}
            ... Instructions...
            }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Ta création de matrice dans 'dirac' est incorrecte: a aucun moment tu ne définies sa taille ou type.

    Dans 'evolution', ton remplissage risque de ne pas faire ce que tu penses car tu convertis tout en entier avant de diviser des entiers relativement petits entre eux.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Juin 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lille
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par math_lab Voir le message
    Ta création de matrice dans 'dirac' est incorrecte: a aucun moment tu ne définies sa taille ou type.

    Dans 'evolution', ton remplissage risque de ne pas faire ce que tu penses car tu convertis tout en entier avant de diviser des entiers relativement petits entre eux.
    Effectivement, pour la taille, j'ai corrigé ça en déclarant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mat_<uchar> f(row,col);
    Par contre il me semble que le type est déclaré par <uchar>.

    Concernant la conversion en entier, faut-tu référence aux (int)?
    Devrais-je plutôt tout mettre en float par défaut?

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/01/2007, 09h02
  2. Réponses: 6
    Dernier message: 30/12/2006, 15h18
  3. [BSD 2006] Erreur de violation d'accès sur un ShowModal
    Par doudoustephane dans le forum C++Builder
    Réponses: 36
    Dernier message: 14/10/2006, 12h10
  4. Erreur violation d'accès
    Par James64 dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2005, 16h54
  5. [D7] Erreur de violation d'accès
    Par plante20100 dans le forum Langage
    Réponses: 10
    Dernier message: 26/08/2005, 11h05

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