Bonjour à tous
je fais une application pour la vision du robot NAO qui doit détecter une balle rouge.Pour cela j'ai commencer à faire une binarisation du rouge et rajouter une fonction cercle a ce code pour dire que rouge+cercle=balle.Mais lors de l'excusion j'ai eu cette erreur:

" Exception de première chance à 0x0fc6908c dans exp1.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xfeeefeea.
Exception non gérée à 0x0fc6908c dans exp1.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xfeeefeea."

sachant que exp1.exe c'est le nom du repertoire ou se trouve mes classes.

Merci de m'aider à comprendre cette erreur
mon code est le suivant:

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
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
 
//This function threshold the HSV image and create a binary image
IplImage* GetThresholdedImage(IplImage* imgHSV){        
	IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
	cvInRangeS(imgHSV, cvScalar(170,160,60), cvScalar(180,256,256), imgThresh); 
	return imgThresh;
}
// fonction cercle
IplImage* cercle(IplImage* img){
 
	//cv::GaussianBlur(image,image,cv::Size(5,5),1.5);
	//imshow("filtre",image);
	IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 );
	CvMemStorage* storage = cvCreateMemStorage(0);
	cvCvtColor( img, gray, CV_BGR2GRAY );
	cvSmooth( gray, gray, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected
	CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100 );
	int i;
	for( i = 0; i < circles->total; i++ )
	{
		float* p = (float*)cvGetSeqElem( circles, i );
		cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );
	}
	//cvNamedWindow( "cicles", 1 );
	//cvShowImage( "circles", img );
	return img;
}
 
 
 
int main(){
	CvCapture* capture =0;
 
	capture = cvCaptureFromCAM(0);
	if(!capture){
		printf("Capture failure\n");
		return -1;
	}
 
	IplImage* frame=0;
 
	cvNamedWindow("Video");      
	cvNamedWindow("Ball");
 
	//iterate through each frames of the video      
	while(true){
 
		frame = cvQueryFrame(capture);            
		if(!frame) break;
 
		frame=cvCloneImage(frame); 
		cvSmooth(frame, frame, CV_GAUSSIAN,3,3); //lissage avec gussien
 
		IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3); 
		cvCvtColor(frame, imgHSV, CV_BGR2HSV); // BGR à HSV
		IplImage* imgThresh = GetThresholdedImage(imgHSV);
 
 
		//std::vector<cv::Vec3f> circles;
		//cv::HoughCircles(frame, circles, CV_HOUGH_GRADIENT,2,50,200,100,25, 100);
 
		imgHSV=cercle(frame);
		cvShowImage("Cercles",imgHSV);
 
		//cvSmooth(imgHSV, imgHSV, CV_GAUSSIAN,3,3);
 
		cvSmooth(imgHSV, imgHSV, CV_GAUSSIAN,3,3); //lissage de l'image binarisée avec gussien
 
		cvShowImage("Ball", imgThresh);            
		cvShowImage("Video", frame);
 
		//Clean up used images
 
		cvReleaseImage(&imgHSV);
 
		cvReleaseImage(&imgThresh);            
		cvReleaseImage(&frame);
 
 
 
		//Wait 50mS
		int c = cvWaitKey(10);
		//If 'ESC' is pressed, break the loop
		if((char)c==27 ) break;      
	}
 
	cvDestroyAllWindows() ;
	cvReleaseCapture(&capture);     
 
	return 0;
}