2012-08-09 573 views

回答

1

我試圖與顯示圖像Concentric circles

但它只能檢測一個圈......這裏是代碼

Mat image_ = imread("E:/Work_DataBase/circle.jpg",3); 
Mat image_temp; 
cvtColor(image_, image_temp, CV_BGR2GRAY); 
vector<Vec3f> circles; 
HoughCircles(image_temp, circles, CV_HOUGH_GRADIENT, 1, image_temp.rows/8,100, 100, 10, 200); 
for(size_t i = 0; i < circles.size(); i++) 
{ 
    Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 
    int radius = cvRound(circles[i][2]); 
    // circle center 
    circle(image_, center, 3, Scalar(0,255,0), -1, 8, 0); 
    // circle outline 
    circle(image_, center, radius, Scalar(0,0,255), 3, 8, 0); 
} 
imshow("circles",image_); 
waitKey(0); 

我會嘗試一次,如果其他選項我發現任何替代我會更新你。

1

我也認爲OpenCv HougCircles每個中心只能檢測一個半徑。 如果要檢測更多半徑,則必須指定中心之間的較小最小距離。但那些不是同心圓。 總之,我認爲openCv HoughCircle模塊不是爲了迎合同心圓而設計的。

2

如果兩個不同的對象的中心距離足夠遠(第五個參數Hough),則Hough變換將僅返回2個圓圈作爲兩個不同的對象。
所以我認爲不可能以這種方式檢測同心圓(因爲它們的中心將是相同的或非常接近的)。

我看到如何使用Hough變換完成該操作的唯一方法是對您要查找的圓的半徑有一個概念,並在具有變化的最小和最大半徑的循環中調用Hough(上一個和下一個Hough)的最後一個參數),每個半徑迭代對應於一個同心圓。

+0

偉大的直覺! – 2017-03-23 18:21:11