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つの値、色相、彩度、値があります。
関連記事 - Python OpenCV
- OpenCV ArUco マーカー
- OpenCV しきい値
- OpenCV でのイメージ マスキング
- OpenCV パッケージ構成
- OpenCV を使用してイメージで Bitwise_AND を利用する
- Python で OpenCV を使用した SIFT