0

cvPutTextを使用して、接続されたコンポーネントを検索し、接続されたコンポーネントに文字「R」のラベルを付けるコードを作成しました。ここで、文字「R」の代わりに、接続されているコンポーネントの数に応じて、1、2、3、...などの数字を印刷する必要があります。その後、領域を見つけて、接続されたコンポーネントの領域をテキストとして印刷する必要があります。誰かがこれを手伝ってくれますか?

これが私のコードです:

imagelab=cvCreateImage(cvGetSize(mor),IPL_DEPTH_8U,3);
CvMemStorage* contour_storage = cvCreateMemStorage(0);
CvSeq* contours;
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.6f, 0.6f, 0, 2);
cvFindContours(mor, contour_storage, &contours, sizeof (CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
cvZero(imagelab);

for( ; contours != NULL; contours = contours->h_next )
 {
    CvScalar color =  CV_RGB( rand()&255, rand()&255, rand()&255 );
    cvDrawContours( imagelab, contours, color, CV_RGB(255,255,255), -1, CV_FILLED, 8 ,cvPoint(0,0));
    CvRect iconBox = cvBoundingRect(contours, 0);
    CvPoint center = cvPoint(iconBox.x + (iconBox.width / 2), iconBox.y + (iconBox.height / 2));
    int area = abs(cvContourArea(contours, CV_WHOLE_SEQ));
    cvPutText(imagelab,"R", center, &font, CV_RGB(255, 255, 255));
  }

ありがとう。

4

1 に答える 1

0

必要なのは整数を文字列に変換することです。カウンターを使うだけです。私のお気に入りは文字列ストリームを使用することです

for(int ncount = 0 ; contours != NULL; contours = contours->h_next, ncount++ )
...
std::stringstream str;
str << ncount;
cvPutText(imagelab,str.str(), center, &font, CV_RGB(255, 255, 255));
于 2013-01-19T00:13:32.613 に答える