スキルUPの道しるべ

本サイトはプロモーションを含みます
上に戻る

【Python&OpenCV】『inRange』 の使い方を初心者向け&例付きでわかりやすく解説!

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_blueupper_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関数は、色の範囲を指定して特定の色を抽出するための強力なツールです。

PythonOpenCVを活用することで、画像処理の可能性が大きく広がります。

今後もさまざまな画像処理に挑戦してみてください。

▼必見(ChatGPTを活用!おすすめAI副業)▼

今なら5000円分の特典あり!! dodgsonblog.com