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:
D'où pourrais venir le problème?
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; }
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... }
Partager