0

私はOpenCVとcvblobライブラリを使用してblobで遊んでいます。

ここで、この特定のケースでブロブを検出したいと思います。

この場合の問題または難しさは、大きい方のブロブの上に2つのブロブがあり、大きい方のブロブの一部と重なっている他のブロブがあることです。

ブロブを検出するためのcvblobライブラリには、バイナリイメージが必要です。

色の均一なブロブをセグメント化するために2つ以上の画像を作成し、それらを2値化して、画像内のすべてのブロブを取得する必要があると思います。

どうやってやるの。

画像

前もって感謝します

4

1 に答える 1

1

私はOpenCVの初心者ですが、その特定のケースでは、cvblobを使用する代わりに、CV_RETR_EXTERNALフラグ(CV_RETR_TREEを使用すると、黄色のブロブは青色のブロブになります)を使用してcvFindContoursを操作する必要があると思います。

それらを追跡するかどうかによって異なります(cvblobは、camshiftを実装する代わりに、blobを追跡するための迅速かつ効率的な方法を提供します)。

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;

                    }
          }
      }

輪郭によって提供される情報を使用すると、ブロブの図心、角度、および境界ボックスを簡単に見つけることができます。

cvblobは(私が見ることができるように)オーバーラップするブロブを好まないので、これらのブロブを追跡することはより難しいかもしれません。独自の追跡方法を実装する必要がある場合があります。

于 2012-01-24T00:14:54.413 に答える