0

前景オブジェクトに境界ボックスを描画する次のプログラムがあります。このバウンディング ボックスは、長方形の 1 辺の長さを測定することで、オブジェクトを長さで分類するのに役立ちます。

さて、これはインスタンスの1つのオブジェクトにのみ長方形を描画します。それらすべてを同時に描画したいと思います。しかし、私は立ち往生しています。ガイダンスまたは支援が必要です。添付画像をご覧ください。前景マスク!【バウンディングボックスを描いた原画】

Rect boundingRect(InputArray contours);
    // Finds the contour with the largest area
    int area = 200;
    int idx = 0;
    for(int i=0; i<contours.size() ;i++) 
    {
        if(area < contours[i].size())
            idx = i; 
    }

    //cout<< contours.size();
    // Calculates the bounding rect of the largest area contour
    Rect rect = boundingRect(contours[idx]);
    Point pt1, pt2;
    pt1.x = rect.x;
    pt1.y = rect.y;
    pt2.x = rect.x + rect.width;
    pt2.y = rect.y + rect.height;
    cout<< idx<< "\t \t";
    // Draws the rect in the original image and show it
    rectangle(frame_Original, pt1, pt2, CV_RGB(0,0,255), 2);
    //cout << pt1; cout << pt2;
4

1 に答える 1

1

countoursサイズが より大きいすべての長方形を描画する場合areaは、インデックスを保存してから、ループを使用してそれらすべてを描画する必要があります。

vector<int> idx;
for(int i=0; i < contours.size() ;i++)
{
    if(area < contours[i].size())
        idx.push_back(i);
}
for((int i=0; i < idx.size() ;i++)
    \\ Draw every contours[idx[i]]  
于 2012-11-07T06:09:45.207 に答える