Pythonに画像処理ライブラリのOpenCVを使って、2つの画像を合成したり重ねたりする方法を前に扱いました。
この中で、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()の関数を使います。関数のパラメータはここでは簡単に扱いましたが、詳細は次のサイトなどを参考にしてください。
論理学の真理値表などを学習しておくと演算の意味の理解が深まると思います。