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:
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:
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...
} |