OpenCV – 2 値画像に対する論理演算

目次

概要

マスク画像のような 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)

コメント

コメントする

目次