2

openCV (C を使用) を使用して、Canny エッジ画像から取得した輪郭内のゼロ以外のピクセルの数をカウントしようとしています。私は cvFindNextContour を使用して、輪郭スキャナーを使用して取得した後続の輪郭を見つけています。

しかし、輪郭で cvCountNonZero を使用すると、エラーが表示されます。

Bad flag (parameter or structure field) (Unrecognized or unsupported array type)
in function cvGetMat, C:\User\..\cvarray.cpp(2881)

私のコードは次のとおりです。

cvCvtColor(image, gray, CV_BGR2GRAY);
cvCanny(gray, edge, (float)edge_thresh, (float)edge_thresh*4, 3);

sc = cvStartFindContours( edge, mem,
                          sizeof(CvContour),
                          CV_RETR_LIST,
                          CV_CHAIN_APPROX_SIMPLE,
                          cvPoint(0,0) );

while((contour = cvFindNextContour(sc))!=NULL)
{
               CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
               printf("%d\n",cvCountNonZero(contour));
               cvDrawContours(final, contour, color, CV_RGB(0,0,0), -1, 1, 8, cvPoint(0,0));

}

どんな種類の助けも大歓迎です。前もって感謝します。

4

1 に答える 1

2

cvCountNonZero(CvArr*) は、配列または IplImage 内の非ゼロの数を見つけるためのものですが、CvSeq* 輪郭タイプには使用できません。そのため、エラーが発生しています。ここに問題の解決策があります。

        CvRect rect = cvBoundingRect( contour, 0);
        cvSetImageROI(img1,rect);
        cout<<cvCountNonZero(img1)<<endl;
        cvResetImageROI(img1);
//where img1 is the binary image in which you find the contours.

コードは次のように説明できます。

1.まず、各輪郭の周りに長方形の領域を作成します。

2.画像​​ ROI をその特定の領域に設定します。

3. cvCountNonZero(); を使用します。リージョン内の非ゼロの数を見つける関数。

4.画像 ROI をリセットします。

楽しいコーディングを。

于 2012-07-03T11:27:36.490 に答える