2017-12-17 25 views
0

私にはイメージimgがあります。私はimgのピクセル値を保持したい場所のすべての場所で値255を持つマスクを他の場所でも0にしています。OpenCV Pythonでバイナリマスクを正しく設定する方法は?

私はこれらの2つの画像を使用したいと思います。マスクとimgは、マスクが255の場所に元のimg値を、マスクが0のすべての場所に元のimg値を持つ行列を作成します。

これまでのところ、私はこれを書いています:

maskedImg = cv2.bitwise_and(img, mask) 

しかし、maskedImgはマスクが0のところに0を持っています。高速のビット演算を使用して、他のすべての場所で0ではなく-1の値を得る方法はありますか?

+1

(ビットではなく)ビット単位またはビット単位で画像を交換してください。 –

+0

@MadPhysicistコメントをいただきありがとうございます。私がマスクとマスクをイメージと入れ替えると、マスクの外のすべての場所で255の値が得られます。マスクの外側の他の場所にも値-1が必要です。 –

+2

なぜあなたが-1を好むのか分かりませんが、OpenCVは通常マスクを含むほとんどの画像にuint8を使用しますので、おそらくあなたはタイプを変更しなければなりません....それが-1になるようにするには – api55

答えて

2

あなたの画像のdtypeはわかりません。デフォルトはnp.uint8なので、結果に-1を設定することはできません。-1 + 256 = 255にアンダーフローします。つまり、dtypeがnp.uint8の場合、それを負の値に設定することはできません。

-1に設定する場合は、dtypeを変更する必要があります。

#masked = cv2.bitwise_and(img, mask).astype(np.int32) 
masked = np.int32(img) 
masked[mask==0] = -1 
関連する問題