目次
概要
マスク画像のような 2 値画像に対する論理演算について解説します。
関連記事
マスク画像を使用した画像処理については、以下の記事を参照してください。
2 値画像の論理演算
2 値画像の値は 0, 255 のいずれかとします。このとき、2 つの 2 値画像に対して、AND 演算、OR 演算、XOR 演算、NOT 演算を以下の関数で行えます。 uint8 型で 255 のビット表現は $(11111111)_2$、0 のビット表現は $(00000000)_2$ であることを利用しています。($(\cdot)_2$ は 2 進表現を表します。)
dst = cv2.bitwise_and()
: AND 演算dst = cv2.bitwise_or()
: OR 演算dst = cv2.bitwise_xor()
: XOR 演算dst = cv2.bitwise_not()
: NOT 演算
サンプルに使用する 2 つの 2 値画像を用意します。
In [1]:
import cv2
from IPython.display import Image, display
def imshow(img):
"""ndarray 配列をインラインで Notebook 上に表示する。"""
ret, encoded = cv2.imencode(".png", img)
display(Image(encoded))
In [2]:
import cv2
import numpy as np
# マスク画像1を作成する。
src1 = np.zeros((300, 300), dtype=np.uint8)
cv2.circle(src1, center=(100, 100), radius=100, color=255, thickness=-1)
# マスク画像1を作成する。
src2 = np.zeros((300, 300), dtype=np.uint8)
cv2.circle(src2, center=(200, 200), radius=100, color=255, thickness=-1)
imshow(src1)
imshow(src2)
2 値画像の AND 演算
2 値画像の AND 演算を行うと、出力画像の画素値は以下のようになります。
- 255: 2 つの入力画像の両方で値が 255 の画素
- 0: 上記以外の画素
In [3]:
dst = cv2.bitwise_and(src1, src2)
imshow(dst)
2 値画像の OR 演算
2 値画像の OR 演算を行うと、出力画像の画素値は以下のようになります。
- 255: 2 つの入力画像の一方または両方で値が 255 の画素
- 0: 上記以外の画素
In [4]:
dst = cv2.bitwise_or(src1, src2)
imshow(dst)
2 値画像の XOR 演算
2 値画像の XOR 演算を行うと、出力画像の画素値は以下のようになります。
- 255: 2 つの入力画像の一方のみで値が 255 の画素
- 0: 上記以外の画素
In [5]:
dst = cv2.bitwise_xor(src1, src2)
imshow(dst)
2 値画像の NOT 演算
2 値画像の NOT 演算を行うと、出力画像の画素値は以下のようになります。
- 255: 入力画像で値が 0 の画素
- 0: 上記以外の画素
In [6]:
dst = cv2.bitwise_not(src1)
imshow(dst)
コメント