2 つの UIImageView があります。最初のものは背景にあり、画像が含まれています。2 つ目はフォアグラウンドにあり、ユーザーがバックグラウンドで見ているものの一部をトレースできるようにするために使用されます。
ユーザーが領域をトレースした後、プログラムが選択した色でそのポリゴンをわずかに透明にして、ポリゴンの下の画像が見えるようにします。
これまでに達成したことは、画像を表示し、ユーザーにトレースを実行させる機能です。フラッドフィルを使用してポリゴンを黒く塗りつぶすことができますが、外側の領域は透明ではなく白くなります。これが私がすることです:
cv::Mat input = [traceImageView.image CVMat];
cv::Mat output, finalOutput, mask;
cv::Rect rect;
cv::cvtColor(input, output, cv::COLOR_RGB2GRAY);
cv::floodFill(output, cv::Point(0, 0), cv::Scalar(255,0,0,0), &rect, cv::Scalar(0,0,0), cv::Scalar(0,0,0));
traceImageView.image = [UIImage imageWithCVMat:output];
出力は次のようになります。
(ソース: mulvaandgipple.com )
その結果、前面の画像がその背後の画像を完全に覆います。ポリゴンの外側の白を透明にしたい。これを行う方法についてのアイデアはありますか?