0

いくつかの画像で輪郭を試すことを計画しています。二値化した後、3つのオブジェクトがあるとしましょう。3つの輪郭があるということですか?はいの場合、どのようにして各輪郭を処理できますか?

ありがとうございました。

更新:最初にblob#1を処理する必要があります。参考までに、ブロブは四辺形とまったく同じではありません。cvSetImageROIを使用しようとしたが、blob#2とblob#3の一部がトリミングされた画像に表示される場合があります。輪郭がブロブ#2と#3を持たずにブロブ#1のみを抽出できるかどうかを考えていました。説明でわかりますか?(C ++APIではなくCAPIを使用)。

4

2 に答える 2

3

それぞれcontourがの配列(std::vector)ですPoints。呼び出すfindContoursと、バイナリイメージの輪郭の配列が返されます。簡単な例を次に示します。

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Mat src;

findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

for(size_t i = 0; i<contours.size(); i++)
{
    //process contours[i]
    for (size_t j=0; j<contours[i].size(); j++)
    {
        int x = contours[i][j].x;
        int y = contours[i][j].y;
        // process point j in contour i
    }
}

こちらがOpenCVの公式マニュアルです。

于 2012-06-28T07:49:58.673 に答える
0

このための関数cv::findContoursを使用する必要があります。それはあなたにあなたの画像の輪郭の階層化されたリストを与えるでしょう。

詳細については、ドキュメントをご覧ください。

階層化されたリストの編集 は、ツリーのような構造を意味します。別の輪郭の内側に輪郭がある場合(たとえば、穴のあるプレートを考えてみてください)、包含情報を保持する構造、または必要に応じてフラット構造を返すように関数に要求できます。

于 2012-06-28T07:48:14.667 に答える