2010-08-01 5 views
0

Lorsque je compile le code ci-dessous je reçois les erreurs suivantes:
OpenCV constructeur prévu, desctructor ou conversion de type

./main.cpp:150: error: expected constructor, destructor, or type conversion before ‘(’ token <br> 
../main.cpp:154: error: expected constructor, destructor, or type conversion before ‘(’ token 
../main.cpp:156: error: expected constructor, destructor, or type conversion before ‘(’ token 
../main.cpp:158: error: expected constructor, destructor, or type conversion before ‘(’ token <br> 

Mais le code semble correct. Il a des problèmes avec

cvReleaseVideoWriter(&writer); 
cvDestroyWindow("monoimage"); 
cvReleaseCapture(&capture); 

Le programme:

#include "iostream" 
#include "stdlib.h" 
#include "stdio.h" 
#include "cv.h" 
#include "highgui.h" 
#include "cstring"/*the includes*/ 

/*You may change the values of the sthreshold and hlower and hupper to get different results....*/ 
const int sthreshold=210; 
const double hlower=178; 
const double hupper=3; 

/*Note:The detection algorithm is the same as the one you can find in one of my previous posts 

The same algorithm is copied from that post and pasted in this 
post only the values of the "sthreshold" and the "hupper" and the "hlower" are different....*/ 

int main() 

{ 
int i,j,k;//for iterations 
int height,width,step,channels;/*HSV means the frame after color conversion*/ 
int heightmono,widthmono,stepmono,channelsmono;/*mono means the frame which has the monochrome image*/ 
const char string1[]="monoimg.avi";/*This is the name of the video which would be the outcome of the blob detection program..*/ 

uchar *data,*datamono; 

i=j=k=0; 

IplImage *frame = 0; 

int key = 0;/*Initializing the capture from the video...*/ 

CvCapture* capture = cvCreateFileCapture("partofvideo3.avi"); 

double fps = cvGetCaptureProperty (/*getting the capture properties......the frame rate..*/ 
capture,CV_CAP_PROP_FPS); 

CvSize size = cvSize(

(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), 

(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) 

); 

CvVideoWriter* writer=cvCreateVideoWriter(string1, CV_FOURCC('D','I','V','X'),fps,size) ; 

/* always check */ 

if (!capture) { 

fprintf (stderr, "Cannot open video file!\n"); 

return(1); 

} 

height = frame->height; 

width = frame->width; 

step = frame->widthStep; 

channels = frame->nChannels; 

data = (uchar *)frame->imageData; 

/* create a window for the video,one for the monochrome image and the other for the original frame */ 

cvNamedWindow("monoimage", CV_WINDOW_AUTOSIZE); 

cvNamedWindow("original frame", CV_WINDOW_AUTOSIZE); 

for (;;) {/*keep looping till we are out of frames...*/ 

if (!cvGrabFrame(capture)) { 

break; 

} 

/*colimgbot---means color image of the bot*/ 

frame = cvRetrieveFrame(capture); 

IplImage *colimgbot = cvCreateImage(cvGetSize(frame), 8, 3); 

IplImage *monoimgbot = cvCreateImage(cvGetSize(frame), 8, 1); 

//------------------------------------------------------------------ 

cvCvtColor(frame,frame,CV_RGB2HSV);/*Converting the color space of the Video....*/ 

/*I have explained this loop in the previous program....*/ 

for(i=0;i< (height);i++) 
{ 
for(j=0;j<(width);j++) 
{ 
if((data[(height-i)*step+j*channels]<=hlower) && (data[(height-i)*step+j*channels]>=hupper)) 
{ 
if((data[(height-i)*step+j*(channels)+1])>sthreshold) 
/*"height-i" because if we use only "i" we were getting vertically inverted result...hence reinverting the same 
would do the required....*/ 

datamono[i*stepmono+j*channelsmono]=255; 
else 
datamono[i*stepmono+j*channelsmono]=0;} 
else datamono[i*stepmono+j*channelsmono]=0; 
}} 

/*Please check these links for the explanation of the erosion and dilation functions 

http://www.dca.fee.unicamp.br/dipcourse/html-dip/c9/s4/front-page.html*/ 

/*so now the last parameter in the function indicates how many times you want to apply dilation 
or erosion*/ 

cvErode(monoimgbot,monoimgbot,0,14); 
cvDilate(monoimgbot,monoimgbot,0,15); 

/*here i have experimented with the values by changing them...and i have found 

that i come to a good result by applying erosion 14 times and dilation 15 times 
you can comment/uncomment play with the values and see what is going on 
Sometimes you will find the areas which are shining in the image also get detected... 

Please think why and then try to post a comment the best commment would get visible on this page*/ 

cvWriteFrame(writer, monoimgbot);/*Write the monochrome video to the writer.. 

to save the results of the video extract*/ 

cvShowImage("original frame", frame); 

cvShowImage("monoimage", monoimgbot); 

if((cvWaitKey(10) & 255) == 27) break; 

} 

} 

/* free memory */ 

cvReleaseVideoWriter(&writer); 

//cvDestroyWindow("original frame"); 

cvDestroyWindow("monoimage"); 

cvReleaseCapture(&capture); 

exit(0); 

Répondre

1

Si vous indentez votre code, il serait probablement vous aider à trouver des problèmes comme celui-ci. Garder main (ou toute autre fonction unique) à mi-chemin raisonnable aiderait probablement aussi. De l'apparence des choses, ce code:

cvReleaseVideoWriter(&writer); 

//cvDestroyWindow("original frame"); 

cvDestroyWindow("monoimage"); 

cvReleaseCapture(&capture); 

exit(0); 

... (à la fin de ce que vous avez publié) est tout en dehors de toute fonction. Un code comme celui-ci doit être dans une fonction.

0

Il y a un supplémentaire { qui devrait être à la fin:

if((cvWaitKey(10) & 255) == 27) break; 

} 

} <--- This should be in the end of the program. 

/* free memory */ 

Cette compile:

 if ((cvWaitKey(10) & 255) == 27) 
      break; 

    } 

    /* free memory */ 
    cvReleaseVideoWriter(&writer); 
    cvDestroyWindow("original frame"); 
    cvDestroyWindow("monoimage"); 
    cvReleaseCapture(&capture); 

    exit(0); 
} 
Questions connexes