Why I get a segmentation fault?
int main() {
int height, width, step, step_mono, channels;
int y, x;
char str[15];
uchar *data, *data_mono;
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contour = 0;
CvPoint* p;
CvFont font;
CvCapture *capture;
IplImage *frame = 0, *mono_thres = 0;
capture = cvCaptureFromAVI("source.avi"); //capture video
if(!cvGrabFrame(capture)) exit(0);
frame = cvRetrieveFrame(capture); //capture the first frame from video source
cvNamedWindow("Result", 1);
while(1){
mono_thres = cvCreateImage(cvGetSize(frame), 8, 1);
height = frame -> height;
width = frame -> width;
step = frame -> widthStep;
step_mono = mono_thres -> widthStep;
channels = frame -> nChannels;
data = (uchar *)frame -> imageData;
data_mono = (uchar *)mono_thres -> imageData;
//converts the image to a binary highlighting the lightest zone
for(y=0;y < height;y++)
for(x=0;x < width;x++)
data_mono[y*step_mono+x*1+0] = data[y*step+x*channels+0];
cvThreshold(mono_thres, mono_thres, 230, 255, CV_THRESH_BINARY);
cvFindContours(mono_thres, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
//gets the coordinates of the contours and draws a circle and the coordinates in that point
p = CV_GET_SEQ_ELEM(CvPoint, contour, 1);
cvCircle(frame, *p, 1, CV_RGB(0,0,0), 2);
cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1.1, 1.1, 0, 1);
sprintf(str, "(%d ,%d)", p->x, p->y);
cvPutText(frame, str, cvPoint(p->x+5,p->y-5), &font, CV_RGB(0,0,0));
cvShowImage("Result", mono_thres);
//next frame
if(!cvGrabFrame(capture)) break;
frame = cvRetrieveFrame(capture);
if((cvWaitKey(10) & 255) == 27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Result");
return 0;
}