Python_RGB_HSV

ゆうき( @BASEBALLY15 )です^^

画像内の『RGB』と『HSV』の値を知る方法ってないですかね?・・・

Pythonを使うと,簡単にそれらの値を知ることが出来ますよ^^

そうなんですか!?
その方法を教えて欲しいです・・・

任せてください!

そもそも『RGB』と『HSV』って何?

RGBとは?

RGBとは,赤(Red)緑(Green)青(Blue)の3色を混ぜて,様々な色を表現することを言います.

RGB
(画像をクリックすると,引用元を確認できます.)

RGBは,0から255までの階層で表現され,

  • (R,G,B)=(255,0,0)→
  • (R,G,B)=(0,255,0)→
  • (R,G,B)=(0,0,255)→

といったように,色を数値として表現することができます.

HSVとは?

HSVとは,色相(Hue)彩度(Saturation・Chroma)明度(Value・Brightness)の3つの成分から成る色空間のことを言います.

HSV
(画像をクリックすると,引用元を確認できます.)
  • 色相(H)→具体的な色を定義する要素.0°~360°で表現される.
  • 彩度(S)→色の鮮やかさ濃さを表す要素.0%~100%で表現される.
  • 明度(V)→色の明るさ暗さを表す要素.0%~100%で表現される.

といったように,色を定義するだけでなく,

どのような特徴を持った色なのか

ということまで,表現することができます.

それでは,『RGB』と『HSV』の値を取得する方法を見ていきましょう⤵

Pythonを使って『RGB』と『HSV』の値を知る方法とは!?

今回ご紹介する方法を使うと・・・

画像内の指定した範囲の『RGB』と『HSV』の値を取得すると同時に,その範囲を画像に表示してくれます.

以下がその結果です⤵

1枚目は値を入力する画面と出力結果で,

2枚目は指定した範囲を枠で囲った画像です.

RGB_HSV_取得結果
RGB値とHSV値を取得

それでは,コードを見ていきましょう⤵

ライブラリ

今回は,画像を扱うために,『OpenCV』と『matplotlib』を使います.

import cv2
import matplotlib.pyplot as plt

コード

画像の読み込みとサイズ変更をしてみよう!

まずは,『OpenCV』を使って,画像の読み込みとサイズの変更を行います.

また,OpenCVで読み込んだ画像は,BGRの順になっているので,RGBの順に変えます.

#画像の読み込み
img = cv2.imread("mov_hts-samp005_Moment.jpg")

#BGRからRGBに変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

#画像のサイズを変更
img = cv2.resize(img, (640, 480))

入力画面を作ろう!

次に,値を入力する画面を作ります.

X_start = int(input("開始位置のX座標の値を入力してください>>"))
Y_start = int(input("開始位置のY座標の値を入力してください>>"))
X_end = int(input("終了位置のX座標の値を入力してください>>"))
Y_end = int(input("終了位置のY座標の値を入力してください>>"))

#指定した範囲(yの始まり:yの終わり,xの始まり:xの終わり)
img_box = img[Y_start:Y_end, X_start:X_end]

input()』で実行画面から入力することが出来て,

int()』と書くことで,数字を読み込むことが出来ます.

RGB値を取得してみよう!

それでは『RGB』の値を取得していきます.

#RGB値を取得
#flattenで値を一列に並べ,minで最小値を取得し,maxで最大値を取得する
r_min = img_box.T[0].flatten().min()
r_max = img_box.T[0].flatten().max()

g_min = img_box.T[1].flatten().min()
g_max = img_box.T[1].flatten().max()

b_min = img_box.T[2].flatten().min()
b_max = img_box.T[2].flatten().max()


#表示
print("R_min {:.2f}    R_max {:.2f}".format(r_min, r_max))
print("G_min {:.2f}    G_max {:.2f}".format(g_min, g_max))
print("B_min {:.2f}    B_max {:.2f}".format(b_min, b_max))

T』は『転置』を意味ていて,行と列を入れ替えます.

HSV値を取得してみよう!

次に,HSV値を取得する方法をご紹介します.

HSV値を取得するためには,まずRGBからHSVへ変更する必要があります.

変更するためには,以下のコードを1行書くだけで大丈夫です^^

#RGBからHSVに変換
img_box_hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

そして,画像内の指定した範囲のHSV値を取得します.

#flattenで値を一列に並べ,minで最小値を取得し,maxで最大値を取得する
h_min = img_box_hsv.T[0].flatten().min()
h_max = img_box_hsv.T[0].flatten().max()

s_min = img_box_hsv.T[1].flatten().min()
s_max = img_box_hsv.T[1].flatten().max()

v_min = img_box_hsv.T[2].flatten().min()
v_max = img_box_hsv.T[2].flatten().max()    


#表示
print("H_min {:.2f}    H_max {:.2f}".format(h_min, h_max))
print("S_min {:.2f}    S_max {:.2f}".format(s_min, s_max))
print("V_min {:.2f}    V_max {:.2f}".format(v_min, v_max))

指定した範囲を枠で囲ってみよう!

指定した範囲を枠で囲む方法をご紹介します.

たった1行で完成します^^

#指定した範囲を枠で囲む
cv2.rectangle(img, (X_start,Y_start), (X_end,Y_end), (255,0,0), 2)

ちなみに,引数はこのようになっています⤵

  • 第1引数:囲いたい画像
  • 第2引数:枠の始まりの位置
  • 第3引数:枠の終わりの位置
  • 第4引数:枠の色(R,G,B)
  • 第5引数:枠の太さ

最後に,画像を表示するためのコードを書いて完成です!

#描写
plt.imshow(img)
plt.show()

終わりに

今回は,Pythonを使って,『RGB』と『HSV』の値を取得する方法をご紹介しました.

今回の方法は,『マスク処理』などを行いたい時に使うので,ぜひ参考にしてみてください^^

それでは・・・

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA