2014-02-28 96 views
0

我已經編寫了以下程序來實時檢測圓。但它不起作用。 編譯器不顯示任何錯誤,但問題是程序甚至沒有檢測到一個圓。我該如何解決它? 這裏是我的代碼 using namespace cv;使用OpenCV進行實時圓檢測

int main() 
{ 
    VideoCapture cap(0); 

    namedWindow("main",CV_WINDOW_AUTOSIZE); 
    namedWindow("blur",CV_WINDOW_AUTOSIZE); 
    Mat img; 
    Mat img2; 
    int c; 
    float radius; 

    while(1) 
    { 
     cap>>img; 
     imshow("main",img); 

     cvtColor(img,img2,CV_BGR2GRAY); 
     GaussianBlur(img2,img2,Size(9,9),2,2); 
     imshow("blur",img2); 

     vector <Vec3f> circles; 
     HoughCircles(img2,circles,CV_HOUGH_GRADIENT,1,img2.rows/8,200,100,0,0); 

     for(size_t i=0;i<circles.size();i++) 
     { 
      Point center(cvRound(circles[i][0]),cvRound(circles[i][1])); 
      radius = cvRound(circles[i][2]); 

      circle(img,center,3,Scalar(0,255,0),-1,8,0); 

      circle(img,center,radius,Scalar(0,0,255),3,8,0); 
     } 

     c = waitKey(33); 

     if(c==27) 
      break; 
    } 

    destroyAllWindows(); 
    return 0; 
} 

回答

0

我檢查了你的程序,好像你只是在檢測後忘了用imshow()來想象它。在檢測之前,您只繪製了圖像,這樣,您無法看到圓圈(也許這會錯誤地讓您認爲沒有檢測到圓圈),即使它確實檢測到了一些圓圈。

嘗試c = waitKey(33);前右加

imshow("main", img); 

如果檢測到某些圓圈,您將看到圓圈。


編輯:解答實時檢測圓您的評論:

做一個while循環風格將使其視頻幀的工作。但是,不管是否實時,取決於HoughCircles()的工作速度以及循環內部的其他內容,儘管您設置了waitKey()的適當時間。

+0

我嘗試了你所說的,但它仍然不適用於實時圓檢測。但是,當我試圖通過加載圖像而不是使用視頻捕捉它的工作。我怎樣才能使它工作的實時圈檢測 – BBB

+0

@Behroz檢查出更新的答案。 – herohuyongtao