0

cvFindContoursの出力、つまり輪郭をcvBoundingRectに渡しています。しかし、次のエラーが発生します。

OpenCV エラー: cvBoundingRect の引数が正しくありません (サポートされていないシーケンス タイプ)、ファイル /home/z/src/OpenCV-2.4.2/modules/imgproc/src/shapeescr.cpp、行 950 は、'cv:: のインスタンスをスローした後に呼び出されます。 Exception' what(): /home/z/src/OpenCV-2.4.2/modules/imgproc/src/ shapeescr.cpp :950: エラー: (-5) 関数 cvBoundingRect でサポートされていないシーケンス タイプです

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

CvRect rect;
cvFindContours( imgB, g_storage, &contours,sizeof(CvContour),CV_RETR_LIST, CV_CHAIN_CODE,cvPoint(0,0));
if(contours)
{cvDrawContours(img_B,contours, CV_RGB(250,0,0), CV_RGB(0,0,250),1,2,8);
rect=cvBoundingRect(contours);
}

このエラーの原因を教えてください。解決策は何ですか?ありがとう

4

3 に答える 3

0

わかりました私は私の答えを見つけました。正しい方法は次のとおりです。

http://singhgaganpreet.com/tag/cvboundingrect-example/

于 2013-03-23T17:17:12.880 に答える
0

cvBoundingRect() は1つの輪郭を取り、それらすべてをそれにフィードしています

于 2013-03-23T09:21:49.923 に答える
0

berak が残したところから続けて、CvSeq** first_contour は関数を提供するものです。

ポインター first_contour は関数によって埋められます。最初の最も外側の輪郭へのポインター、または輪郭が検出されない場合は NULL が含まれます (画像が完全に黒の場合)。h_next および v_next リンクを使用して、first_contour から他の輪郭に到達することができます。

したがって、次のようなものが必要になります。

CvSeq* contour = *contours;
while (contour != NULL)
{
    //insert boundingbox and other code
    contour = contour->h_next;
}
于 2013-03-23T14:59:25.040 に答える