HOWTO · Python

OpenCV を使用してイメージで Bitwise_AND を利用する

この記事では、OpenCV ライブラリを使用して bitwise_AND 演算を使用する方法について説明します。

このページの内容

ビット単位の演算子は通常、個々のビット操作を使用するビットまたは 2 進数のパターンに対してビット単位の演算を実行するために使用されます。 OpenCV は、これと同じ概念を使用して、画像から情報を操作および抽出します。

この記事では、Python OpenCV ライブラリを使用して Bitwise AND を利用する方法を具体的に説明します。

OpenCV のビット演算子

OpenCV で使用される基本的なビット演算子は次のとおりです。

  1. ビット論理積
  2. ビットOR
  3. ビット単位の NOT
  4. ビット単位の XOR

OpenCV ではビット単位の演算子が使用されているため、画像の一部を抽出またはフィルター処理して、画像を描写し、非四角形の ROI (関心領域) で操作できます。

OpenCV でイメージに Bitwise AND 演算子を使用する

OpenCV では、Bitwise AND 演算子を使用して 2つの異なる画像を 1つに結合したり、画像の一部を別の部分に結合したりできます。 通常、2つの配列/スカラー/イメージの要素ごとにビット単位の論理結合を計算します。

OpenCV には、ビット単位の操作を実行する組み込みメソッドがあります。 したがって、OpenCV の Bitwise AND 演算子には、cv.bitwise_and() を使用します。

Python OpenCV bitwise_and() の構文

cv.bitwise_and(src1, src2[, dst[, mask]]) -> dst

パラメーター

src1 最初の入力配列/画像。
src2 2 番目の入力配列 / 画像。
dst 入力配列と同じサイズとタイプの出力画像。
mask オプションの操作マスク。変更する出力配列の要素を指定する 8 ビットの単一チャネル配列。

以下に示す例を使用して、画像で Bitwise AND 演算子を使用する方法を見てみましょう。

まず、OpenCV を cv としてインポートし、次に OpenCV の imread() メソッドを使用して、imread() を使用して 2つの画像を読み取る必要があります。 このメソッドは、提供された画像を読み取り、画像データを配列形式で返します。

ここで、imread() によって返されたこのデータを、img1 および img2 という名前の変数内に格納する必要があります。 Bitwise AND を適用する前に、使用している 2つの画像が同じ形状、つまり幅、高さ、チャネル数が同じであることを確認する必要があります。

画像の形状がわからない場合は、次のように OpenCV の shape() メソッドを使用できます。

コードスニペット:

# import opencv
import cv2 as cv

# read the images
img1 = cv.imread("img1.jpg")
img2 = cv.imread("img2.jpg")

print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)

dimension = (img2.shape[1], img2.shape[0])
img1 = cv.resize(img1, dimension, interpolation=cv.INTER_AREA)

print("Shape of img_1 : ", img1.shape)
print("Shape of img_2 : ", img2.shape)

出力:

Shape of img_1 : (4000, 6000, 3)
Shape of img_2 : (3133, 4700, 3)

Shape of img_1 : (3133, 4700, 3)
Shape of img_2 : (3133, 4700, 3)

ほとんどの場合、2つの画像のサイズは同じではないため、上記のコードに示すように、resize() メソッドを使用して画像のサイズを変更する必要がある場合があります。 この場合、いずれか 1つの画像のサイズまたは両方の画像のサイズを変更できます。

この例では、上記のように img2 のサイズのように resize() メソッドを使用して img1 のサイズを変更します。

コードスニペット:

bitwise_AND = cv.bitwise_and(img1, img2)

cv.imshow("Image-1", img1)
cv.imshow("Image-2", img2)
cv.imshow("Bitwise-AND", bitwise_AND)

cv.waitKey(0)

同じサイズの 2つの画像が得られたので、cv.bitwise_and() を使用して、指定された 2つの画像に対して Bitwise AND 演算を実行し、出力を bitwise-AND という名前の変数に格納できます。 すべての入力、出力、および結果の画像を表示するには、imshow() 関数を使用します。

入力画像が出力画像に対してどのように表示されるかを明確にするために、すべての画像を表示しています。 上記のコードの出力は次のようになります。

画像のサイズを変更し、bitwise_and() を使用してビット単位の AND 演算を実行します

また、waitKey() メソッドを使用し、それに値 0 を渡します。これにより、ユーザーは短時間または任意のキーが押されるまでウィンドウを表示できるようになります。 したがって、引数に 0 が渡されると、いずれかのキーが押されるまで待機します。

これが、同じサイズの 2つの画像に対して Bitwise AND を実行する方法です。