web-dev-qa-db-ja.com

OpenCVで画像のマスクされた部分内のすべてを「ゼロ」にする方法

画像(IplImage 8ビット)とバイナリマスク(これも同じサイズの8ビットIplImageであり、すべてのピクセルの値が0または255のいずれか)がある場合、どのようにしてすべてのピクセルを作成できますか?値がゼロのマスク内のピクセルに対応する画像の値はゼロであり、他の値(つまり255)のマスク内のピクセルに対応する画像内のすべてのピクセルの値は元のピクセルと同じです。画像?

つまり、「マスク領域内」にあるものはすべて元の値を保持し、マスク領域外にあるものはすべてゼロになります。

12

bitwise_and()関数を使用するだけです。

ドキュメントを確認してください。

7
Abid Rahman K

最も簡単な方法は、「Mat img」(マスクされる画像、入力)と「Matmasked」(マスクされた画像、出力)です。

  img.copyTo(masked, mask)

ここで、「マットマスク」は必ずしもバイナリではない行列です(copyToは値がゼロの要素を考慮します)。マスクは、任意のサイズとタイプにすることができます。必要に応じて再割り当てされます。

doc を参照してください。

21
Antonio Sesto

乗算またはビット-そしてマスクと画像。そのためのOpenCV関数がいくつかありますが、Cインターフェースの名前はわかりません。

c ++の場合:

Mat image, mask;

image = image * mask;
// or 
image = image & mask;
3
Sam