我在OpenCV中遇到HoughCircles進行圓檢測。但它有一個參數,指定檢測到的圓圈之間的最小距離。我關心的是,如果兩個圓圈是同心圓的,也就是說一個圓圈在另一個圓圈內,那麼這項工作會是什麼?HoughCircles能否在opencv中檢測圓圈內的圓圈?
感謝 沙善
我在OpenCV中遇到HoughCircles進行圓檢測。但它有一個參數,指定檢測到的圓圈之間的最小距離。我關心的是,如果兩個圓圈是同心圓的,也就是說一個圓圈在另一個圓圈內,那麼這項工作會是什麼?HoughCircles能否在opencv中檢測圓圈內的圓圈?
感謝 沙善
我試圖與顯示圖像
但它只能檢測一個圈......這裏是代碼
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);
我會嘗試一次,如果其他選項我發現任何替代我會更新你。
我也認爲OpenCv HougCircles每個中心只能檢測一個半徑。 如果要檢測更多半徑,則必須指定中心之間的較小最小距離。但那些不是同心圓。 總之,我認爲openCv HoughCircle模塊不是爲了迎合同心圓而設計的。
如果兩個不同的對象的中心距離足夠遠(第五個參數Hough
),則Hough變換將僅返回2個圓圈作爲兩個不同的對象。
所以我認爲不可能以這種方式檢測同心圓(因爲它們的中心將是相同的或非常接近的)。
我看到如何使用Hough變換完成該操作的唯一方法是對您要查找的圓的半徑有一個概念,並在具有變化的最小和最大半徑的循環中調用Hough
(上一個和下一個Hough
)的最後一個參數),每個半徑迭代對應於一個同心圓。
偉大的直覺! – 2017-03-23 18:21:11