OpenCV 色を検出する

Ammar Ali 2022年4月12日
OpenCV 色を検出する

このチュートリアルでは、Python で OpenCV の inRange() 関数を使用して画像の色を検出する方法について説明します。

Python で OpenCV の inRange() 関数を使用して画像の色を検出する

OpenCV の inRange() 関数を使用して、画像に存在する色を検出して抽出できます。場合によっては、何らかの理由で画像から色を削除または抽出したいことがあります。

OpenCV の inRange() 関数を使用して色のマスクを作成できます。つまり、その色の範囲を使用して色を検出できます。色は、カラー画像内に RGB トリプレット値形式で保存されます。

マスクを作成するには、その色の明るいバージョンと暗いバージョンの RGB トリプレット値を使用する必要があります。たとえば、BRG 画像で赤色を抽出する場合は、明るい赤色に(0,0,50)を使用し、暗い赤色に(255,50,50)を使用して、赤色のマスクを作成できます。

画像と BRG の下限値と上限値を渡して、マスクを作成できます。

たとえば、さまざまな色の円を含む画像を読み取り、赤色のマスクと緑色のマスクを作成してみましょう。以下のコードを参照してください。

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.waitKey(0)

出力:

インレンジを使用してマスクを作成する

2つのマスクを元の画像と比較して、正しい色が含まれているかどうかを確認できます。マスク 1 が赤色の上にあり、マスク 2 が青色の上にあることがわかります。

inRange() 関数は、元の画像と同様の新しいバイナリ画像を作成します。ご覧のとおり、マスク画像には白と黒の 2 色しかありません。

inRange() 関数は、色の値を 1 または白(指定された色範囲に色が存在する場合)に設定し、色が指定された色範囲に存在しない場合は 0 に設定します。上の画像は BRG カラースケールでした。

そのため、inRange() 関数内で BRG 値を使用しましたが、画像を HSV などの他のカラースケールに変換することもできます。この場合、HSV スケール値を使用してマスクを作成します。次に、画像から赤と青の色を抽出してみましょう。

2つの色を抽出するには、OpenCV の bitwise_or() 関数を使用して、2つのマスクを組み合わせて 1つのマスクを作成する必要があります。その後、OpenCV の bitwise_and() 関数を使用して、画像を 1 番目と 2 番目の引数として使用し、マスクを 3 番目の引数として使用して、画像から色を抽出できます。

以下のコードを参照してください。

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

# final mask
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.imshow("mask of both colors", mask)
cv2.imshow("target colors extracted", target)
cv2.waitKey(0)

出力:

画像から色を抽出する

最後の画像に見られるように、赤と青の色は指定された画像から正常に抽出されます。ある色空間を別の色空間に変換するには、OpenCV の cvtColor() 関数を使用できます。

HSV 色空間のある画像がある場合は、HSV 値を使用してマスクを作成する必要があります。HSV では、色には色を定義する 3つの値、色相、彩度、値があります。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - Python OpenCV

関連記事 - OpenCV Image