Python で OpenCV を使用した HSV カラースペース

Manav Narula 2023年1月30日
  1. HSV カラースペース
  2. OpenCV で画像を HSV 色空間に変換する
  3. OpenCV の HSV 色空間を使用して色を検出する
  4. まとめ
Python で OpenCV を使用した HSV カラースペース

プログラミングで画像を処理する場合、画像を数値の変数に変換し、そのような値を処理します。すべての画像は、いくつかの望ましい色を持つことができます。

カラーモデルを使用して、これらの色を数値にマッピングします。一般的なカラーモデルには、RGB、CMYK、HSV などがあります。

opencv ライブラリを使用して、Python で画像やビデオを処理および操作できます。このライブラリには、画像の複雑なアルゴリズムや手法を実装できる関数が満載です。

このチュートリアルでは、opencv ライブラリの HSV 色空間について説明します。

HSV カラースペース

デフォルトでは、RGB カラーモデルは画像の色を表します。これは、RGB がグラフィックスで最も一般的に使用されるカラーモデルであり、幅広い色を表現できるためです。

ただし、最も有用なモデルの 1つは HSV モデルです。

HSV モデルは、RGB モデルの色の範囲を円筒形で表すために使用されます。この色空間は、オブジェクトの追跡によく使用されます。

HSV カラーモデルは、HueSaturation、および BrightnessValue)の略です。

Hue 属性は、使用されている色の色合いを指定するために使用され、Saturation 属性は、色が使用される量を決定します。Value 属性は、色の明るさを指定するために使用されます。

OpenCV で画像を HSV 色空間に変換する

opencv ライブラリを使用して、ある色空間から別の色空間に画像を変換できます。このために、cvtColor() 関数を使用します。

imread() 関数を使用して画像を読み取る場合、画像は RGB 色空間にあります。cvtColor() 関数を使用して、これを HSV に変換できます。

次の例を参照してください。

import cv2

i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2HSV)
cv2.imshow("Final", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

出力:

cvtColor 関数を使用して画像を RGB から HSV に変換します

上記の例では、cvtColor() 関数で指定された cv2.BGR2HSV 属性に注意してください。これは、画像を RGB 色空間から HSV に変換することを指定します。

waitKey()destroyAllWindows() 関数の組み合わせは、出力ウィンドウを閉じる前に、ユーザーが何らかのキーを押すのを待つために使用されます。

cv2.BGR2HSV は、画像を RGB から HSV に変換します。H の範囲は 0〜180 です。cv2.BR2HSV_FULL を使用して、画像を H の範囲が 0〜255 の HSV に変換することもできます。

OpenCV の HSV 色空間を使用して色を検出する

説明したように、この色空間の主な用途はオブジェクトの追跡です。このモデルを使用して、画像から特定の色をマッピングできるマスクを作成できます。

HSV モデルのすべての色には、ある程度の色の範囲があります。それらの範囲の上限と下限は、色を検出するために使用できます。

inRange() 関数を使用して、HSV 色空間の上限と下限を使用して特定の色を検出するバイナリマスクを返すことができます。

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

import cv2
import numpy as np

img = cv2.imread("img3.jpeg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
bound_lower = np.array([25, 20, 20])
bound_upper = np.array([100, 255, 255])
mask_green = cv2.inRange(hsv_img, bound_lower, bound_upper)
cv2.imshow("Mask", mask_green)

cv2.waitKey(0)
cv2.destroyAllWindows()

出力:

inRange 関数で HSV 範囲を使用して色を検索する

上記の例では、画像の緑色を検出するためのバイナリマスクを作成します。画像は HSV 色空間に変換され、緑色の範囲が定義されます。

inRange 関数で上限と下限を使用して、色を検出し、マスクを返します。

このマスクを画像にマッピングして、色を検出し、特定の色の境界を描くことができます。

まとめ

このチュートリアルでは、色空間について説明し、opencv の HSV 色空間に焦点を当てました。

まず、HSV 色空間の基本と、このモデルで色がどのようにマッピングされるかについて説明しました。一般的に使用されている RGB モデルとの違いも強調されました。

また、opencv を使用して画像を HSV に変換する方法も示しました。

HSV 色空間は、オブジェクト追跡にも使用されます。opencv ライブラリの inRange 関数を使用して、指定された色の上限と下限を使用して、指定された画像の色を検出する方法について説明しました。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python OpenCV