2014-01-09 78 views
-4

我是OpenCV的新手。我正在使用opencv2.4.8庫在Windows 8中使用Visual Studio 2010。 我需要的對象物的檢測算法的項目,所以我試圖理解這段代碼是如何工作的:Opencv語法錯誤:缺少';'之前'while'

#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> Bas.cpp(23):錯誤C3872: '0x3000處':這個字符是不允許在標識符
  2. 1> Bas.cpp(24):錯誤C2065:':未聲明的標識符
  3. 1> Bas.cpp(24):錯誤C2146:語法錯誤:缺少';'在標識符'cvNamedWindow'之前

我不知道while循環或cvNamedWindow有什麼問題。請幫忙。

所有的
+0

爲什麼不在代碼中使用正確的縮進?這將使找到問題的原因變得更容易。 – jogojapan

+0

我甚至無法在您的代碼段中找到*「0x3000」! –

+3

如果您將網站中的代碼複製並粘貼到文本文件中,則文件中可能會出現非打印字符,這些字符會混淆VS或編譯器。嘗試在調用'cvNamedWindow'之前和之後刪除所有空格並鍵入新的空格。看看是否糾正了問題或報告了新的錯誤。 – Ned

回答

1
  • 首先,你說你其他的copy代碼,但我看到的是not copy。例如,在原代碼(來自鏈接你提供),這是

    capture = cvCaptureFromCAM(0); 
    

    ,但在你的代碼,就成了

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

    ,當你試圖讀取多次這可能會導致錯誤相同的相機設備。

  • 此外,正如其他人所評論的,當您從網站複製和粘貼代碼時,可能會出現非打印字符,這會導致VS或編譯器混淆。

試着先解決這些問題,看看它是怎麼回事。

+0

第二次調用cvCaptureFromCAM(0);甚至會失敗並使第一個有效的(除了明顯的memleak)失效。 – berak

+0

@berak我剛剛在我的電腦上測試過它。它的工作,但沒有意義做到這一點。 – herohuyongtao

0

哦,請,如果你必須偷代碼,至少從here抓住它!

舊的c-api不再維護,並且在不久的將來會消失。所以,如果你看到使用IplImages和cv * Functions的代碼, - 像地獄一樣運行!

另請參見:tutorials

相關問題