画像と、ポイントのリスト (ポリゴン) で指定された選択があります。私の目標は、選択範囲を除くすべてが透明な別の画像を取得することです。
この質問には 2 つの部分があります。 * ポイントのリストからマスクを作成する方法は? * マスクを使用して新しい画像を作成する最良の方法は何ですか? cvCopy を考えていましたが、アルファ チャネルをどのように処理できますか?
画像と、ポイントのリスト (ポリゴン) で指定された選択があります。私の目標は、選択範囲を除くすべてが透明な別の画像を取得することです。
この質問には 2 つの部分があります。 * ポイントのリストからマスクを作成する方法は? * マスクを使用して新しい画像を作成する最良の方法は何ですか? cvCopy を考えていましたが、アルファ チャネルをどのように処理できますか?
同様の問題があり、奇妙な(あまり速くない)方法で解決しました:
extractChannel
)。bitwise_and
各チャンネルとポリゴン マスク イメージの間で操作を行います。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
を使用してマスクを作成できます(ポリゴンによって異なります)。例えば:fillPoly
fillConvexPoly
Mat polyMat = Mat::zeros(size, CV_8UC1);
fillConvexPoly(polyMat, polygon, Scalar(255));