2011-07-29 52 views
0

我使用OpenCV和cvblob庫來玩blob。檢測其他blob的blob

現在我想在這個特殊情況下檢測blob。

問題或在這種情況下的困難是有兩個斑點在一個較大的一個和另一個斑點重疊的較大的一部分。

在cvblob庫中檢測一個blob,你必須有一個二進制圖像。

我想我需要創建兩個或多個圖像來分割色彩均勻的斑點,然後將它們二值化以獲得圖像中的所有斑點。

我該怎麼做。

Image

在此先感謝

回答

1

我在OpenCV中相當多的初學者,但我想,對於這種特殊情況,你應該用CV_RETR_EXTERNAL標誌cvFindContours工作(與CV_RETR_TREE,貴黃blob將會是藍色的)而不是使用cvblob。

這取決於您是否要跟蹤它們(cvblob提供快速有效的方式來跟蹤斑點,而不必實施camshift)。

CvMemStorage* storage = cvCreateMemStorage(0); 
    CvSeq* firstContour = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint), storage); 

    cvFindContours(image, storage, &firstContour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); 




    // S'il y a un contour 
    if(firstContour != 0) { 

     for(CvSeq* c = firstContour; c != NULL; c = c->h_next) { 

        for(int i = 0; i < c->total; ++i) {      

         // Get each point of the current contour 
         CvPoint* pt = CV_GET_SEQ_ELEM(CvPoint, c, i); 

         double x = pt->x; 
         double y = pt->y; 

        } 
      } 
     } 

通過輪廓給出的信息,您可以輕鬆找到blob的質心,角度和邊界框。

跟蹤這些blob可能會更困難,因爲cvblob不喜歡重疊斑點(我可以看到)。您可能必須實施自己的追蹤方法。