3

重ねて表示したい2つの画像があります。1 つの画像はシングル チャネル画像で、2 番目の画像は RGB 画像ですが、ほとんどの領域が透明です。

これら 2 つの画像が異なる関数でどのように生成されるか。これらを重ねて表示することはわかっています。呼び出すときに同じウィンドウ名を使用できますがcvShowImage()、異なる関数から描画されている場合は機能しません。これを試すとき、cvCvtcolor()バイナリ イメージを単一チャネルから RGB に変換してから、別の関数から 2 番目のイメージを表示していました。しかし、これはうまくいきませんでした。両方の画像は同じ寸法、深さ、チャンネル数 (変換後) です。

1 つの画像を 2 番目の関数に渡してから描画することは避けたいと思います。そこで、これら 2 つの画像を重ねて表示する簡単な汚いトリックを探しています。

ありがとうございました

編集: 代替テキスト

4

3 に答える 3

1

画像を「オーバーレイ」する方法はありません。cvShowImage()メモリから単一のイメージを表示します。それらをブレンド/組み合わせる必要があります。これを行うにはいくつかの方法があります。
1 つまたは 2 つのチャンネルを別のチャンネルにコピーしたり、AND、OR、XOR などの論理演算を使用したり、Add、Multiply、MultiplyScale などの算術演算を使用したりできます (これらの演算は 255 より大きい値を飽和させます)。これらはすべて、ブロブ画像のようなオプションのマスク画像でも実行できます。
当然、オリジナルを上書きしないように、これを 3 番目のバッファーに入れたいと思うかもしれません。

于 2011-01-05T17:17:40.577 に答える
1

それは不可能だと思います。新しいイメージを作成するか、既存のイメージを変更する必要があります。これを行う方法を示す記事は次のとおりです: OpenCV での透明な画像オーバーレイ

于 2011-01-06T17:45:36.650 に答える
0

どうやらOpenCV 2.1バージョンを使用して実行できるようになりました http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html#cv-displayoverlay

于 2011-01-28T09:19:48.407 に答える