2017-02-22 128 views
0

我試圖在Android中使用來檢測兩個同心圓。大的外圈是紅色的,內圈的小圈子是藍色的。這個想法是在距離很長的時候檢測大圈,並在距離變短時檢測內圈。使用opencv檢測外圈HoughCircles

Sample picture

我使用簡單的代碼:

Mat matRed = new Mat(); 
Core.inRange(matHsv, getScalar(hue - HUE_D, saturation - SAT_D, brightness - BRIGHT_D), getScalar(hue + HUE_D, saturation + SAT_D, brightness + BRIGHT_D), matRed); 
//here we have black-white image 
Imgproc.GaussianBlur(matRed, matRed, new Size(0, 0), 6, 6); 
Mat matCircles = new Mat(); 
Imgproc.HoughCircles(matRed, matCircles, CV_HOUGH_GRADIENT, 1, matRed.rows()/8, 100, param2, 0, 0); 

調用inRange後,我們有黑底白字環。 HoughCircles函數僅檢測內部黑色圓圈。 我怎樣才能讓它檢測到外部的白色圓圈呢?

+0

你有一個示例圖像? –

+0

在圖像上使用Canny,然後使用HoughCircles –

回答

0

沒有看到一個示例圖像(或者很確定你的意思是'當距離很長時檢測大圓圈,當距離變短時檢測內圈'),這是有點猜測,但我建議使用Canny edge detect獲取您的圈子的邊界,然後使用contours來提取邊緣。你可以使用contour hierarchy來確定哪個在裏面,如果你需要提取一個或另一個。

此外,鑑於圓是不同的顏色,你可能想看看使用inRange分段根據顏色;例如,this post from PyImageSearch包含一個基於顏色的跟蹤的Python應用程序。

+0

謝謝!你可以附上一些代碼嗎? –

+0

據我所知canny邊緣檢測器使用灰色圖像。當彩色圖像轉換爲灰色時,我們會丟失信息。額外的顏色信息可用於複雜的條件(下雨,下雪等) –

+0

我鏈接的教程包含代碼示例;我想你會更適應這些目標,特別是因爲我不知道你想要做什麼。確實,轉換爲灰色將會丟失信息,但您可以保留彩色圖像的副本並使用它進行一些額外的處理。您可能想要使用inRange來根據顏色進行細分;請參閱[這裏](http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/)瞭解基於顏色的跟蹤的示例Python應用程序。 – ELRG