Pythonを使って画像処理を行う際に、OpenCVは非常に強力なライブラリです。
その中でも「inRange」関数は特定の色範囲を抽出するための便利なツールとしてよく利用されます。
そこで、この記事では、初心者向けに「inRange」の使い方を丁寧に解説し、コード例や実行結果を交えて視覚的に理解しやすく説明します。
OpenCVとは
OpenCVは、画像処理やコンピュータビジョンのためのライブラリで、Pythonを含む複数のプログラミング言語に対応しています。顔認識、物体検出、画像変換など、さまざまな機能を持っており、画像処理の分野で広く使用されています。
✓『OpenCVによる画像処理入門』で基礎の確認から応用した使い方まで学ぶことができます。本記事とあわせて、ぜひ、チェックしてください。
inRange関数とは
inRangeは、指定した色の範囲に入るピクセルを抽出し、その範囲内にあるピクセルを白(255)、範囲外のピクセルを黒(0)として二値画像を生成する関数です。
特定の色を強調したい場合や、マスク処理を行いたい場合に非常に有用です。
inRange関数の構文
cv2.inRange(src, lowerb, upperb)
src
: 入力画像(通常はBGR形式の画像)lowerb
: 抽出したい色の下限upperb
: 抽出したい色の上限
具体的なコード例と解説
それでは、具体的なコード例を見ていきましょう。実行結果も含めて解説します。
基本的な色範囲の抽出
まずは、特定の色範囲を抽出する基本的なコード例を紹介します。
以下のコードは、青色の範囲にあるピクセルを抽出する例です。
import cv2 import numpy as np # 画像を読み込む image = cv2.imread('sample.png') # BGR形式の青色の範囲を定義 lower_blue = np.array([100, 0, 0]) upper_blue = np.array([255, 100, 100]) # inRange関数で指定した青色範囲を抽出 mask = cv2.inRange(image, lower_blue, upper_blue) # 元の画像とマスク画像を表示 cv2.imshow('Original Image', image) cv2.imshow('Blue Mask', mask) cv2.waitKey(0) cv2.destroyAllWindows()
このコードは、入力画像から青色の部分だけを抽出します。
lower_blue
とupper_blue
で定義した色範囲に基づいて、青色のピクセルが白く表示され、それ以外の部分は黒く表示されます。
実行結果
上記のコードを実行すると、元の画像と、青色の範囲が抽出されたマスク画像が表示されます。
このように、inRange
を使うと特定の色を簡単に強調できます。
応用: 複数の色範囲を抽出
次に、複数の色範囲を抽出する方法を紹介します。
以下のコードは、赤と緑の範囲を同時に抽出する例です。
import cv2 import numpy as np # 画像を読み込む image = cv2.imread('sample.png') # BGR形式の赤色と緑色の範囲を定義 lower_red = np.array([0, 0, 100]) upper_red = np.array([100, 100, 255]) lower_green = np.array([0, 100, 0]) upper_green = np.array([100, 255, 100]) # 赤色と緑色の範囲をそれぞれ抽出 mask_red = cv2.inRange(image, lower_red, upper_red) mask_green = cv2.inRange(image, lower_green, upper_green) # 二つのマスクを組み合わせる combined_mask = cv2.bitwise_or(mask_red, mask_green) # 元の画像と組み合わせたマスク画像を表示 cv2.imshow('Original Image', image) cv2.imshow('Red and Green Mask', combined_mask) cv2.waitKey(0) cv2.destroyAllWindows()
このコードでは、赤色と緑色をそれぞれ抽出し、bitwise_or
関数で二つのマスクを組み合わせています。
実行結果
このコードを実行すると、赤と緑の範囲が抽出されたマスク画像が表示されます。複数の色を同時に抽出する場合に非常に便利です。
カラー抽出の応用例: 背景の除去
カラー抽出を応用して、背景を除去する方法も紹介します。以下のコードでは、特定の背景色を除去し、対象物だけを残す方法を説明します。
import cv2 import numpy as np # 画像を読み込む image = cv2.imread('sample.png') # 背景色の範囲を定義 lower_background = np.array([200, 200, 200]) upper_background = np.array([255, 255, 255]) # 背景色を除去するマスクを作成 mask = cv2.inRange(image, lower_background, upper_background) # 背景を除去して対象物を抽出 result = cv2.bitwise_not(mask) # 結果画像を表示 cv2.imshow('Original Image', image) cv2.imshow('Background Removed', result) cv2.waitKey(0) cv2.destroyAllWindows()
このコードは、背景が白っぽい画像から背景を除去し、対象物だけを抽出するものです。
実行結果
実行すると、背景が除去され、対象物のみが残った画像が表示されます。
このように、inRange
関数を応用することで、さまざまな画像処理が可能です。
関連・おすすめ書籍
まとめ
inRange関数は、色の範囲を指定して特定の色を抽出するための強力なツールです。
PythonとOpenCVを活用することで、画像処理の可能性が大きく広がります。
今後もさまざまな画像処理に挑戦してみてください。
▼必見(ChatGPTを活用!おすすめAI副業)▼
今なら5000円分の特典あり!! dodgsonblog.com