0

対象のオブジェクトの周りに境界ボックスを描画するコードを書きました。次のステップは、境界ボックスのサイズを変更して、背景が少しあるようにすることです。ここで、この関心領域を処理できるように、境界ボックスの内容を別の画像で取得したいと考えています。私が書いたコードは次のとおりです。

findContours(Sal11, Objects, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

       //Kleine contouren verwijderen.
       for(unsigned int i = 0; i < Objects.size(); i++)
       {
           if (Objects[i].size() > 250 && Objects[i].size() < 500)
               Objects2.push_back(Objects[i]);
       }

       cv::Mat Person=input;
       // Bounding Box
       for(unsigned int i = 0; i < Objects2.size(); i++)
       {
           Rect rect = boundingRect(Objects2[i]);
           Point pt1, pt2;
           pt1.x = rect.x - 100;
           pt1.y = rect.y;
           pt2.x = rect.x + rect.width + 100;
           pt2.y = rect.y + rect.height;
           rectangle(input, pt1, pt2, CV_RGB(0,0,255), 1);
           cout << rect << endl;

           Rect rect2;
           Person = input(rect);
       }

rect2は今のところ何もしていませんが、 のコンテンツにしたいと考えていますrect。でpt1pt2バウンディング ボックスのサイズを変更します。コードはリアルタイム処理用です。

4

2 に答える 2

0

残念ながら、2 つの定義が一緒に台無しになってしまいます。画像への描画と、画像からの関心領域の切り取りです。

1)OpenCVの関数「rectangle」は、指定された画像に長方形を描画しています。

2) 'Person=input(rect)' は 'input' のサブイメージを作成します。「入力」画像を操作するのと同じように操作できます。画像のコピーを実行していないことを覚えておいてください。つまり、O(1) で実行され、「人」のピクセルを変更すると、「入力」の適切なピクセルが変更されます。

于 2013-11-06T14:05:56.763 に答える
0

作成Rectした新しい からを作成するのは、Point次のように簡単です。

Rect rect2(pt1, pt2);

このAPIは、このような 2 点から四角形を作成できると述べています。

それがあなたのやりたかったことですか?

また、次のようにコンストラクターを使用して新しいポイントを作成することを検討します。

Point pt1(rect.x - 100, rect.y);
Point pt2(rect.x + rect.width + 100, rect.y + rect.height);
于 2013-11-06T14:10:02.900 に答える