2011-07-29 9 views
0

私はOpenCVとcvblobライブラリを使用してblobを再生します。他のブロブよりブロブを検出

今、私はこの特定の場合にブロブを検出したいと思います。

この場合の問題または難易度は、大きなものの上に2つのくぼみがあり、大きいものの一部に重なる他のくぼみがあります。

blobを検出するcvblobライブラリでは、バイナリイメージが必要です。

私は色の均一なブロブを分割し、画像内のすべてのブロブを取得するためにそれらを2値化するために2つ以上のイメージを作成する必要があると思います。

どうすればいいですか?事前

答えて

1

Image

おかげで、私はOpenCVの中にはかなり初心者だけど、私はその特定のケースのために、あなたはCV_RETR_TREEで(CV_RETR_EXTERNALフラグをcvFindContoursで動作するはず、と推測、あなたの黄色blobはcvblobを使用する代わりに青色のINになります)。

トラッキングするかどうかによって異なります(cvblobは、カムシフトを実装する代わりに、ブロブをすばやく効率的にトラッキングする方法を提供します)。

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のトラッキングは、cvblobが(私が見るように)重複するBLOBを好きではないので、より難しいかもしれません。独自のトラッキング方法を実装する必要があるかもしれません。