1

2 つのビットマップ イメージがあります。1 つは、USB カメラで撮影した写真が含まれています。もう 1 つは四角形のような形状を含みますが、台形にすることもできます。たとえば、1 つの色のみを含むランダムな形状にすることもできます。画像の残りの部分は現在白です。

2 つの画像は同じサイズではありませんが、スケーリング アルゴリズムはここで最も難しい部分ではないため、2 つの画像がまったく同じサイズであると仮定します。

USBカメラの画像に自分の形を表示したい。白い部分は、コンビナゾンの目的で透明と見なされます。現在、画像をピクセルごとに編集することを考えていますが、それを行うAPIを探しています。

そのため、真ん中に家がある写真を撮り、赤い四角形を重ねると、結果の画像には家の周りに赤い四角形が付いた元の写真が表示されます。

これが役立つ場合は、.NET を使用しています。便利な機能が含まれている場合は、win32 API を使用することもできます。

編集:正しい軌道に乗ったので、答えを受け入れました。これは実際には非常に簡単です。

Bitmap^ overlay_image = gcnew Bitmap("overlay.bmp");
Bitmap^ original_image = gcnew Bitmap("original.bmp");
overlay_image->MakeTransparent(Color::White);
Graphics^ g_original = Graphics::FromImage(original_image);
g_original->DrawImage(overlay_image, 0, 0);

ほら、original_image今、その上に赤い長方形があります。実際、私の 30fps USB カメラには十分な速さなので、リアルタイムで取得できます。

現在、スケーリングは行われていません。また、オーバーレイ イメージの背景が白であると仮定して、透明にします。

4

2 に答える 2

1

注目に値する非常に堅牢なライブラリの 1 つはImageMagickです。ライブラリの .NET ポートさえあります。透明度、形状、および重ね合わせに関連することができます。

最初にコマンド ライン バージョン(たとえば、convertorコマンド) を使用してcomposite、目的の動作を実行できるかどうかを確認する場合があります。それが機能する場合、ライブラリを使用して同じ機能を実装できるはずです。

于 2009-05-22T17:54:14.643 に答える
1

完全な .NET プラットフォームを使用している場合、System.Drawing.Imaging にはアルファ チャネルとマスキング用の関数があります。

http://www.codeproject.com/KB/GDI-plus/alphafx.aspx

于 2009-05-22T17:41:06.177 に答える