2014-02-09 22 views
3

我需要使用斑點檢測和結構分析和形狀描述符(更具體地說findContours,drawContoursmoments)來檢測圖像中的彩色圓圈。我需要知道每種方法的優缺點,哪種方法更好。任何人都可以告訴我這兩種方法之間的區別嗎?比較blob檢測和結構分析和形狀描述符在opencv

+1

如果沒有看到一些**樣本圖像**,實際上很難指定哪種方法更好。每種方法在其他數據集中都有其自身的弱點。 – scap3y

+0

這是圖片http://i.imgur.com/lDRIx6y.jpg。哪種方法最好,爲什麼。我已經嘗試使用blob與這個圖像,但由於圖像質量,它不會返回任何東西。我已經用findContours和時刻成功檢測到了所有點。也許我錯過了一些東西,這就是爲什麼我的blob檢測不起作用。這就是爲什麼我想知道這兩種方法的優點和缺點 – Steph

+2

你可以嘗試一些更簡單的..?也許將彩色圖像分成不同的通道,然後在執行推回時使用低閾值在每個通道上執行「HoughCircles」。 – scap3y

回答

1

作爲@ scap3y在評論中建議我會採取更簡單的方法。什麼我總是做在這種情況下是類似於這樣:

// Convert your image to HSV color space 
Mat hsv; 
hsv.create(originalImage.size(), CV_8UC3); 
cvtColor(originalImage,hsv,CV_RGB2HSV); 

// Chose the range in each of hue, saturation and value and threshold the other pixels 
Mat thresholded; 
uchar loH = 130, hiH = 170; 
uchar loS = 40, hiS = 255; 
uchar loV = 40, hiV = 255; 
inRange(hsv, Scalar(loH, loS, loV), Scalar(hiH, hiS, hiV), thresholded); 

// Find contours in the image (additional step could be to 
// apply morphologyEx() first) 
vector<vector<Point>> contours; 
findContours(thresholded,contours,CV_RETR_EXTERNAL,CHAIN_APPROX_SIMPLE); 

// Draw your contours as ellipses into the original image 
for(i=0;i<(int)valuable_rectangle_indices.size();i++) { 
    rect=minAreaRect(contours[valuable_rectangle_indices[i]]); 
    ellipse(originalImage, rect, Scalar(0,0,255)); // draw ellipse 
} 

留給你現在要做的唯一事情是在什麼範圍的標記在HSV color space搞清楚。

+0

感謝您建議其他方式的傢伙。但只要我的代碼工作,我很好。我只是想對blob和結構分析進行比較。 – Steph