Opencv语法错误:缺少';'在'while'之前

时间:2014-01-09 05:16:11

标签: c++ opencv syntax-error

我是OpenCV的新手。我在Windows 8中使用Visual Studio 2010终极版与opencv2.4.8库。 我需要一个项目的对象检测算法,所以我试着理解这个代码是如何工作的:

#include <opencv\cv.h>
#include <opencv\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;
} 

int main(){

    CvCapture* capture =0;       
    IplImage* frame=0;
    capture = cvCaptureFromCAM(0);
    capture = cvCaptureFromCAM(0);
    if(!capture){
        printf("Capture failure\n");
        return -1;
    }

    cvNamedWindow("Video",1);
    cvNamedWindow("Ball",1);

    //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);//smooth the image using Gaussian

        IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3); 
        cvCvtColor(frame, imgHSV, CV_BGR2HSV); //Change the color format from BGRtoHSV
        IplImage* imgThresh = GetThresholdedImage(imgHSV);

        cvSmooth(imgThresh, imgThresh, CV_GAUSSIAN,3,3); //smooth the binary image             
        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;
}

这是来自http://opencv-srf.blogspot.in/2010/09/object-detection-using-color-seperation.html的代码 我尝试解决这些错误,但无法摆脱这些:

  1. 1&gt; Bas.cpp(23):错误C3872:'0x3000':标识符中不允许使用此字符
  2. 1&gt; Bas.cpp(24):错误C2065:'':未声明的标识符
  3. 1&gt; Bas.cpp(24):错误C2146:语法错误:缺少';'在标识符'cvNamedWindow'之前
  4. 我不知道while循环或cvNamedWindow有什么问题。请帮忙。

2 个答案:

答案 0 :(得分:1)

  • 首先,您说出copy其他代码,但我看到的是not copy。例如,在原始代码中(来自您提供的链接),它是

    capture = cvCaptureFromCAM(0);
    

    ,但在您的代码中,它变为

    capture = cvCaptureFromCAM(0);
    capture = cvCaptureFromCAM(0);
    

    当您尝试从同一相机设备多次读取时,这可能会导致错误。

  • 此外,正如其他人评论的那样,当您从网站复制并粘贴代码时,可能会出现非打印,实际上不可见的字符,这会使VS或编译器感到困惑。

首先尝试解决此类问题,看看它是如何发生的。

答案 1 :(得分:0)

哦,拜托,如果你必须窃取代码,至少从here抓取它!

旧的c-api不再维护,并且在不久的将来会消失。所以,如果你看到使用IplImages和cv *函数的代码, - 像地狱一样运行!

还:tutorials