1

画像と、ポイントのリスト (ポリゴン) で指定された選択があります。私の目標は、選択範囲を除くすべてが透明な別の画像を取得することです。

この質問には 2 つの部分があります。 * ポイントのリストからマスクを作成する方法は? * マスクを使用して新しい画像を作成する最良の方法は何ですか? cvCopy を考えていましたが、アルファ チャネルをどのように処理できますか?

4

1 に答える 1

2

同様の問題があり、奇妙な(あまり速くない)方法で解決しました:

  1. 画像の赤、緑、青のチャネルを抽出しました ( を使用extractChannel)。
  2. bitwise_and各チャンネルとポリゴン マスク イメージの間で操作を行います。
  3. それらをマージして戻しました(merge関数を使用)。

1 チャンネルの画像がある場合は、bitwise_and.

C++コード:

void createPOI(const Mat& src, const Mat& polyMat, Mat& dst)
{
    vector<Mat> array(3);

    for (int i=0; i<3; i++)
    {
        extractChannel(src, array[i], i);
        bitwise_and(array[i], polyMat, array[i]);
    }

    merge(array, dst);
}

/関数polyMatを使用してマスクを作成できます(ポリゴンによって異なります)。例えば:fillPolyfillConvexPoly

Mat polyMat = Mat::zeros(size, CV_8UC1);
fillConvexPoly(polyMat, polygon, Scalar(255));
于 2012-07-07T15:03:52.227 に答える