【Python】OpenCVでピクセル毎の論理演算 – AND, OR, XOR, NOT

Pythonの応用
スポンサーリンク

Pythonに画像処理ライブラリのOpenCVを使って、2つの画像を合成したり重ねたりする方法を前に扱いました。

【Python】OpenCVで画像を合成する - addWeighted, bitwise演算, ROI
Pythonに画像処理ライブラリのOpenCVを使って、2つの画像を合成したり重ねたりする方法を見ていきたいと思います。addWeighted()での合成や、関心領域(ROI)とbitwise演算を使った合成の方法を見ていきます。

この中で、bitwiseの論理演算を少し扱いましたが、ここではこの論理演算のAND、OR、XOR、NOTについて2つの画像を使ってそれぞれ簡単にまとめておこうと思います。

スポンサーリンク

2つの画像を準備して演算を行う

これまでと同じようにjupyter notebookを使ってコートを書いて行きます。

import cv2
import matplotlib.pyplot as plt
%matplotlib inline

img1 = cv2.imread('images/img1.jpg')
img2 = cv2.imread('images/img2.jpg')

前と同様にライブラリをインポート。同じ作業ディレクトリにimagesフォルダを用意し、その中に2つの画像ファイルを準備しておきました。

plt.imshow(img1)
plt.imshow(img2)

それぞれの画像を表示してみます。

操作を0と1の論理演算として単純化するために色の変換をしなくてもいいように白黒の画像にしています。この画像を使って論理演算の各処理を行って行きます。

スポンサーリンク

AND演算 – bitwise_and()

論理積ANDの計算は次のようになります。

A B A AND B
1 1 1
1 0 0
0 1 0
0 0 0

用意した2つの画像とこの計算の対応関係と考えてみるとわかると思います。

bitwise_and()を使って論理積ANDを計算します。

bitwise_and = cv2.bitwise_and(img1, img2)
plt.imshow(bitwise_and)

第1、第2引数にそれぞれの画像を渡して表示してみます。(第3引数を与えれば出力先を指定することになります)

スポンサーリンク

OR演算 – bitwise_or()

論理和ORの計算は次のようになります。

A B A OR B
1 1 1
1 0 1
0 1 1
0 0 0

bitwise_or()を使って論理積ORを計算します。

bitwise_or = cv2.bitwise_or(img1, img2)
plt.imshow(bitwise_or)

表示するとこうなります。

スポンサーリンク

XOR演算 – bitwise_xor()

排他的論理和XORの計算は次のようになります。

A B A XOR B
1 1 0
1 0 1
0 1 1
0 0 0

bitwise_xor()を使って論理積XORを計算します。

bitwise_xor = cv2.bitwise_xor(img1, img2)
plt.imshow(bitwise_xor)

表示するとこうなります。

スポンサーリンク

NOT演算 – bitwise_not()

論理否定の計算は次のようになります。

A NOT A
1 0
0 1

これは、反転を意味します。

bitwise_not()を使って論理否定を計算します。

bitwise_not = cv2.bitwise_not(img1)
plt.imshow(bitwise_not)

img1を使って計算すると、こうなります。

スポンサーリンク

最後に

Pythonに画像処理ライブラリのOpenCVを使って、ピクセル毎の論理演算AND、OR、XOR、NOTについて扱いました。

それぞれbitwise_and()、bitwise_or()、bitwise_xor()、bitwise_not()の関数を使います。関数のパラメータはここでは簡単に扱いましたが、詳細は次のサイトなどを参考にしてください。

配列操作 — opencv 2.2 documentation

論理学の真理値表などを学習しておくと演算の意味の理解が深まると思います。

タイトルとURLをコピーしました